Você está na página 1de 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 rpido que o leopardo

Para no cometer gafes...

Como fala/escreve mesmo? Escreve-se PostgreSQL ou postgres Pronncia-se postgres-s-qi-uel ou postgres No se diz/escreve: Postgree, PostrGREE, Postgr

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

Qual a velocidade mxima de um carro supersnico?

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

Caractersticas de um carro supersnico. . .

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

Qual a velocidade mxima de um dragster?

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

Qual a velocidade mxima de um fusca?

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

Qual a velocidade mxima de um carro de rolem?

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

O banco est lento!


Problemas comuns. . .

Proporcionalmente, os problemas de lentido esto em: 60% dos problemas so relacionados ao mau uso de expresses SQL. 20% dos problemas so relacionados a m modelagem do banco de dados. 10% dos problemas so relacionados a m congurao do SGDB. 10% dos problemas so relacionados a m congurao do Sistema Operacional.

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

O banco est lento!


Equvocos de arquiteturas. . .

Concentrao de regras de negcio na aplicao para processos em lote. Integridade referencial na aplicao. Mal dimensionamento de I/O (CPU, Plataforma, Disco). Ambientes virtualizados (Vmware, XEN, etc..) em AMD64/EMT64. Uso de conguraes padres do SO e/ou do PostgreSQL. Infra-estrutura concorrente (Rede, Storage...)

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

Melhores escolhas
Melhor equipamento. . .

Servidores dedicados para o PostgreSQL Storage com Fiber Channel, iSCSI: Grupos de RAID dedicados SCSI > SAS > SATA > IDE RAID 5 ou 10: por Hardware Mais memria! (At 4GB em 32 bits) Processadores de 64 bits: Performance at 3 vezes do que os 32 bits (AMD64 e EMT64 - Intel)

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

Melhores escolhas
Melhor 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 verso do PostgreSQL (atualmente 8.3) e partir do cdigo-fonte No usar servios concorrentes (Apache, MySQL, SAMBA...) em discos, semforos e shared memory Usar, se possvel, um kernel (linux) mais recente (e estvel)

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

Ajustes de Performance
Parmetros 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/le-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 rpido que o leopardo

Ajustes de Performance
Limites do Sistema Operacional. . .

no shell pmanson:# su - postgres postgres@pmanson:$ ulimit 65535 /etc/security/limits.conf postgres postgres postgres postgres soft soft hard hard nole nproc nole nproc 4096 4096 63536 63536

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

Como organizar discos


Melhor I/O. . .

Discos ou parties distintos para: Logs de transaes (WAL) ndices: Ext2 Tabelas (particionar tabelas grandes) Tablespace temporrio (em ambiente BI)* Archives SO + PostgreSQL Log de Sistema

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

postgresql.conf
Memria. . .

postgresql.conf max_connections: O menor nmero possvel shared_buffers: 33% do total -> Para operaes em execuo temp_buffers: Acesso s tabelas temporrias work_mem: Para agregao, ordenao, consultas complexas maintenance_work_mem: 75% da maior tabela ou ndice max_fsm_pages: Mximo de pginas necessrias p/ mapear espao livre. Importante para operaes de UPDATE/DELETE.

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

postgresql.conf
Discos e WAL. . .

postgresql.conf wal_sync_method: open_sync, fdatasync, open_datasync wal_buffers: tamanho do cache para gravao do WAL commit_delay: Permite efetivar vrias transaes na mesma 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 rpido que o leopardo

postgresql.conf
Discos 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 rpido que o leopardo

postgresql.conf
Discos 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 sesso SET enable_seqscan TO off;
Fernando Ike de Oliveira PostgreSQL: O elefante mais rpido que o leopardo

O terror dos DBAs. . .

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

O terror dos DBAs. . .

O terror dos DBAs(Object-Relation Mapping). . . Use ORM que permitam expresses SQL. Expresses em Object Query Language ainda no usam o melhor plano para consultas. O mundo ainda no todo objeto. Servidores de Aplicao tem pool de conexo, use-o! Voc no v mas as vezes o seu ORM faz. . . SELECT * FROM cadastro; SELECT * FROM cadastro, venda, produto;

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

Aplicaes bem construdas. . .


. . . Mas meu prazo no permite!

Boas prticas para desenvolvimento de aplicaes Modele bem o banco de dados prevendo grande crescimento da base e acesso concorrente. Operaes pesadas, execute com Funes/Store Procedures direto no PostgreSQL. De preferncia para o padro SQL/ISO(2008). Considere que um dia a aplicao tenha que usar mltiplas instncias de banco de dados. Evite uso de LIKE, ILIKE. Prera Full Text Search(tsearch2) Use Indces com moderao.

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

. . . e seu DBA feliz!

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

Ferramentas auxiliares
Tuning SQL. . .

EXPLAIN ANALYZE test_base=# EXPLAIN ANALYZE SELECT foo FROM bar; Ferramentas grcas Pgfouine Pgadmin3 PhpPgAdmin Cedrus

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

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

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

De olho no log...
Identicando 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 rpido que o leopardo

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

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

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

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

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

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

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

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

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

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

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

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

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

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

Ferramentas auxiliares
Manuteno. . .

Autovacuum X Vacuum Depende do uso (Aplicaes Web, OLTI, BI) Vacuum vacuum_cost_delay: tempo de atraso para vacuum executar automaticamente nas tabelas grandes Autovacuum (Habilitado por padro partir do 8.3) autovacuum_naptime: tempo de espera para execuo do autovacuum.

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

Ferramentas auxiliares
Ferramentas de Stress. . .

Pgbench: no diretrio do contrib do PostgresSQL, padro de transaes do tipo TPC-B. DBT-2: Ferramenta da OSDL, padro de transaes do tipo TPC-C. BenchmarkSQL: Ferramenta Java para benchmark em SQL para vrios banco de dados (JDBC), padro de transaes do tipo TPC-C. Jmeter: Ferramenta Java genrica para testes de stress, usado para aplicaes (Web, ...) e tambm pode ser direto para um banco de dados.

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo

Quando o tuning no resolve. . . Quando o tuning no resolve. . .


Escalabilidade vertical:

Mais e melhores discos; Mais memria; Melhor processador (quad core, 64bits) Escalabilidade horizontal: Pgpool I (distribuio de carga de leitura e pool de conexes) PgPool II (PgPool I + paralelizao de grandes consultas) Slony I (Replicao Multi-Master Assncrona) Bucardo (Replicao Mult-Master Assncrona) Warm Stand By/Log Shipping Pgbouncer + PL/Proxy + Slony
Fernando Ike de Oliveira PostgreSQL: O elefante mais rpido que o leopardo

Links Documentao Ocial:


http://www.postgresql.org/docs/

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

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

Teste de stress com solues livres e proprietrias:


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 rpido que o leopardo

Dvidas

Links e Listas de discusso:


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 rpido que o leopardo

Concluso

Contatos: fernando.ike@b2br.com.br fernando.ike@gmail.com http://www.midstorm.org/~fike/weblog

Fernando Ike de Oliveira

PostgreSQL: O elefante mais rpido que o leopardo