postgresql: performance tuning

38
Performance Tuning para banco de dados PostgreSQL Fernando Ike de Oliveira PostgreSQL-BR Novembro de 2008 / SIPAM Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Upload: fernando-ike

Post on 05-Dec-2014

9.114 views

Category:

Technology


1 download

DESCRIPTION

Palestra sobre performance em PostgreSQL

TRANSCRIPT

Page 1: PostgreSQL: Performance Tuning

Performance Tuning para banco de dadosPostgreSQL

Fernando Ike de Oliveira

PostgreSQL-BR

Novembro de 2008 / SIPAM

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 2: PostgreSQL: Performance Tuning

Para não cometer gafes...

Como fala/escreve mesmo?Escreve-se PostgreSQL ou postgres

Pronúncia-se postígres-és-qüi-uel ou postígres

Não se diz/escreve: Postgree, PostrGREE, Postgrí

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 3: PostgreSQL: Performance Tuning

Qual a velocidade máxima de um carro supersônico?

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 4: PostgreSQL: Performance Tuning

Características de um carro supersônico. . .

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 5: PostgreSQL: Performance Tuning

Qual a velocidade máxima de um dragster?

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 6: PostgreSQL: Performance Tuning

Qual a velocidade máxima de um fusca?

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 7: PostgreSQL: Performance Tuning

Qual a velocidade máxima de um carro de rolemã?

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 8: PostgreSQL: Performance Tuning

O banco está lento!Problemas comuns. . .

Proporcionalmente, os problemas de lentidão estão em:

60% dos problemas são relacionados ao mau uso deexpressões SQL.

20% dos problemas são relacionados a má modelagem dobanco de dados.

10% dos problemas são relacionados a má configuraçãodo SGDB.

10% dos problemas são relacionados a má configuraçãodo Sistema Operacional.

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 9: PostgreSQL: Performance Tuning

O banco está lento!Equívocos de arquiteturas. . .

Concentração de regras de negócio na aplicação paraprocessos em lote.

Integridade referencial na aplicação.

Mal dimensionamento de I/O (CPU, Plataforma, Disco).

Ambientes virtualizados (Vmware, XEN, etc..) emAMD64/EMT64.

Uso de configurações padrões do SO e/ou do PostgreSQL.

Infra-estrutura concorrente (Rede, Storage...)

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 10: PostgreSQL: Performance Tuning

Melhores escolhasMelhor equipamento. . .

Servidores dedicados para o PostgreSQL

Storage com Fiber Channel, iSCSI: Grupos de RAIDdedicados

SCSI > SAS > SATA > IDE

RAID 5 ou 10: por Hardware

Mais memória! (Até 4GB em 32 bits)

Processadores de 64 bits: Performance até 3 vezes doque os 32 bits (AMD64 e EMT64 - Intel)

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 11: PostgreSQL: Performance Tuning

Melhores escolhasMelhor Sistema Operacional. . .

Sistemas Operacionais *nix: Linux (Debian, Gentoo),FreeBSD, Solaris, etc

Em Linux: use Sistemas de arquivos XFS (noatime), Ext3(writeback, noatime), EXT2

Instale a última versão do PostgreSQL (atualmente 8.3) eà partir do código-fonte

Não usar serviços concorrentes (Apache, MySQL,SAMBA...) em discos, semáforos e shared memory

Usar, se possível, um kernel (linux) mais recente (eestável)

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 12: PostgreSQL: Performance Tuning

Ajustes de PerformanceParâmetros do Sistema Operacional. . .

echo “2” > /proc/sys/vm/overcommit_memory

echo “25%” > /proc/sys/kernel/shmmax

echo “25%/64” > /proc/sys/kernel/shmall

echo “deadline” > /sys/block/sda/queue/scheduler

echo “250 32000 100 128” > /proc/sys/kernel/sem

echo “131072” > /proc/sys/fs/file-max

ethtool -s eth0 speed 1000 duplex full autoneg off

echo “16777216” > /proc/sys/net/core/rmem_default

echo “16777216” > /proc/sys/net/core/wmem_default

echo “16777216” > /proc/sys/net/core/wmem_max

echo “16777216” > /proc/sys/net/core/rmem_max

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 13: PostgreSQL: Performance Tuning

Ajustes de PerformanceLimites do Sistema Operacional. . .

no shellpmanson:˜# su - postgrespostgres@pmanson:˜$ ulimit 65535

/etc/security/limits.conf

postgres soft nofile 4096postgres soft nproc 4096postgres hard nofile 63536postgres hard nproc 63536

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 14: PostgreSQL: Performance Tuning

Como organizar discosMelhor I/O. . .

Discos ou partições distintos para:

Logs de transações (WAL)

Índices: Ext2

Tabelas (particionar tabelas grandes)

Tablespace temporário (em ambiente BI)*

Archives

SO + PostgreSQL

Log de Sistema

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 15: PostgreSQL: Performance Tuning

postgresql.confMemória. . .

postgresql.conf

max_connections: O menor número possível

shared_buffers: 33% do total -> Para operações emexecução

temp_buffers: Acesso às tabelas temporárias

work_mem: Para agregação, ordenação, consultascomplexas

maintenance_work_mem: 75% da maior tabela ou índice

max_fsm_pages: Máximo de páginas necessárias p/mapear espaço livre. Importante para operações deUPDATE/DELETE.

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 16: PostgreSQL: Performance Tuning

postgresql.confDiscos e WAL. . .

postgresql.conf

wal_sync_method: open_sync, fdatasync, open_datasync

wal_buffers: tamanho do cache para gravação do WAL

commit_delay: Permite efetivar várias transações namesma chamada de fsync

checkpoint_segments: > 64

checkpoint_completion_target: 0.5 à 0.7

checkpoint_timeout: 10min (depende)

wal_buffers: 8192kB -> 16GB

join_collapse_limit = > 8

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 17: PostgreSQL: Performance Tuning

postgresql.confDiscos e WAL. . .

postgresql.conf

random_coast_page: 2 à 4

effective_cache_size: 2/3 da RAM

default_statistics_target: > 30

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 18: PostgreSQL: Performance Tuning

postgresql.confDiscos e WAL. . .

postgresql.conf

enable_bitmapscan = on|off

enable_hashagg = on|off

enable_hashjoin = on|off

enable_indexscan = on|off

enable_mergejoin = on|off

enable_nestloop = on|off

enable_seqscan = on|off

enable_sort = on|off

enable_tidscan = on|off

sessãoSET enable_seqscan TO off;

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 19: PostgreSQL: Performance Tuning

O terror dos DBA’s. . .

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 20: PostgreSQL: Performance Tuning

O terror dos DBA’s. . .

O terror dos DBA’s( Object- Relation Mapping). . .

Use ORM que permitam expressões SQL.

Expressões em Object Query Language ainda não usam omelhor plano para consultas.

O mundo ainda não é todo objeto.

Servidores de Aplicação tem pool de conexão, use-o!

Você não vê mas as vezes o seu ORM faz. . .SELECT * FROM cadastro;

SELECT * FROM cadastro, venda, produto;

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 21: PostgreSQL: Performance Tuning

Aplicações bem construídas. . .. . . Mas meu prazo não permite!

Boas práticas para desenvolvimento de aplicações

Modele bem o banco de dados prevendo grandecrescimento da base e acesso concorrente.

Operações pesadas, execute com Funções/StoreProcedures direto no PostgreSQL.

De preferência para o padrão SQL/ISO(2008).

Considere que um dia a aplicação tenha que usarmúltiplas instâncias de banco de dados.

Evite uso de LIKE, ILIKE. Prefira Full TextSearch(tsearch2)

Use Indíces com moderação.

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 22: PostgreSQL: Performance Tuning

. . . e seu DBA feliz!

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 23: PostgreSQL: Performance Tuning

Ferramentas auxiliaresTuning SQL. . .

EXPLAIN ANALYZEtest_base=# EXPLAIN ANALYZE SELECT foo FROMbar;

Ferramentas gráficas

Pgfouine

Pgadmin3

PhpPgAdmin

Cedrus

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 24: PostgreSQL: Performance Tuning

http://explain-analyze.info. . .

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 25: PostgreSQL: Performance Tuning

De olho no log...Identificando problemas pelos logs. . .

No postgresql.conf

logging_collector = on

log_min_duration_statement = 1000 (1 s)

log lock waits = on

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 26: PostgreSQL: Performance Tuning

Pgfouine - http://pgfouine.projects.postgresql.org

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 27: PostgreSQL: Performance Tuning

Pgadmin3 - http://www.pgadmin.org/

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 28: PostgreSQL: Performance Tuning

Pgadmin3 - http://www.pgadmin.org/

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 29: PostgreSQL: Performance Tuning

PhpPgAdmin - http://phppgadmin.sourceforge.net/

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 30: PostgreSQL: Performance Tuning

PhpPgAdmin - http://phppgadmin.sourceforge.net/

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 31: PostgreSQL: Performance Tuning

Cedrus - http://sourceforge.net/projects/cedrus

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 32: PostgreSQL: Performance Tuning

Cedrus - http://sourceforge.net/projects/cedrus

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 33: PostgreSQL: Performance Tuning

Ferramentas auxiliaresManutenção. . .

Autovacuum X VacuumDepende do uso (Aplicações Web, OLTI, BI)

Vacuumvacuum_cost_delay: tempo de atraso para vacuumexecutar automaticamente nas tabelas grandes

Autovacuum (Habilitado por padrão à partir do 8.3)

autovacuum_naptime: tempo de espera para execução doautovacuum.

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 34: PostgreSQL: Performance Tuning

Ferramentas auxiliaresFerramentas de Stress. . .

Pgbench: no diretório do contrib do PostgresSQL, padrãode transações do tipo TPC-B.

DBT-2: Ferramenta da OSDL, padrão de transações dotipo TPC-C.

BenchmarkSQL: Ferramenta Java para benchmark emSQL para vários banco de dados (JDBC), padrão detransações do tipo TPC-C.

Jmeter: Ferramenta Java genérica para testes de stress,usado para aplicações (Web, ...) e também pode ser diretopara um banco de dados.

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 35: PostgreSQL: Performance Tuning

Quando o tuning não resolve. . .

Quando o tuning não resolve. . .Escalabilidade vertical:

Mais e melhores discos;

Mais memória;

Melhor processador (quad core, 64bits)

Escalabilidade horizontal:Pgpool I (distribuição de carga de leitura e pool deconexões)

PgPool II (PgPool I + paralelização de grandes consultas)

Slony I (Replicação Multi-Master Assíncrona)

Bucardo (Replicação Multí-Master Assíncrona)

Warm Stand By/Log Shipping

Pgbouncer + PL/Proxy + Slony

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 36: PostgreSQL: Performance Tuning

Links

Documentação Oficial:http://www.postgresql.org/docs/

Power PostgreSQL:http://www.powerpostgresql.com/

PostgreSQL Brasil:http://www.postgresql.org.br/

Teste de stress com soluções livres e proprietárias:http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=7053&pagina=5

Benchmark Brou-Ha-Ha:http://blogs.ittoolbox.com/database/soup/archives/benchmark-brouhaha-17939

BenchmarkSQL, DBT-2 - SourceForge:http://www.sf.net

Jmeter:http://jakarta.apache.org/jmeter/

Tsung:http://tsung.erlang-projects.org/

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 37: PostgreSQL: Performance Tuning

Dúvidas

Links e Listas de discussão:http://archives.postgresql.org/pgsql-performance/

https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

http://www.postgresql.org/docs/current/static/performance-tips.html

http://www.revsys.com/writings/postgresql-performance.html

http://www.powerpostgresql.com/Docs

http://wiki.postgresql.org/wiki/Special:Search?search=performance&go=Go

IRC irc.freenodes.net:#postgresql

#postgresql-br

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

Page 38: PostgreSQL: Performance Tuning

Conclusão

Contatos:[email protected]

[email protected]

http://www.midstorm.org/~fike/weblog

Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo