PostgreSQL: Performance Tuning

7,538 views
7,419 views

Published on

Palestra sobre performance em PostgreSQL

Published in: Technology, Business
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,538
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
241
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

PostgreSQL: Performance Tuning

  1. 1. 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
  2. 2. 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
  3. 3. Qual a velocidade máxima de um carro supersônico? Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  4. 4. Características de um carro supersônico. . . Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  5. 5. Qual a velocidade máxima de um dragster? Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  6. 6. Qual a velocidade máxima de um fusca? Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  7. 7. Qual a velocidade máxima de um carro de rolemã? Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  8. 8. O banco está lento! Problemas comuns. . . Proporcionalmente, os problemas de lentidão estão em: 60% dos problemas são relacionados ao mau uso de expressões SQL. 20% dos problemas são relacionados a má modelagem do banco de dados. 10% dos problemas são relacionados a má configuração do SGDB. 10% dos problemas são relacionados a má configuração do Sistema Operacional. Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  9. 9. O banco está lento! Equívocos de arquiteturas. . . Concentração de regras de negócio na aplicação para processos em lote. Integridade referencial na aplicação. Mal dimensionamento de I/O (CPU, Plataforma, Disco). Ambientes virtualizados (Vmware, XEN, etc..) em AMD64/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
  10. 10. 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 memória! (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 rápido que o leopardo
  11. 11. 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 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 (e estável) Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  12. 12. Ajustes de Performance Parâ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
  13. 13. Ajustes de Performance Limites do Sistema Operacional. . . no shell pmanson:˜# su - postgres postgres@pmanson:˜$ ulimit 65535 /etc/security/limits.conf postgres soft nofile 4096 postgres soft nproc 4096 postgres hard nofile 63536 postgres hard nproc 63536 Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  14. 14. Como organizar discos Melhor 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
  15. 15. postgresql.conf Memória. . . postgresql.conf max_connections: O menor número possível shared_buffers: 33% do total -> Para operações em execução temp_buffers: Acesso às tabelas temporárias work_mem: Para agregação, ordenação, consultas complexas 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 de UPDATE/DELETE. Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  16. 16. postgresql.conf Discos 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 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 rápido que o leopardo
  17. 17. 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 rápido que o leopardo
  18. 18. 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 sessão SET enable_seqscan TO off; Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  19. 19. O terror dos DBA’s. . . Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  20. 20. 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 o melhor 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
  21. 21. 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 grande crescimento da base e acesso concorrente. Operações pesadas, execute com Funções/Store Procedures direto no PostgreSQL. De preferência para o padrão SQL/ISO(2008). Considere que um dia a aplicação tenha que usar múltiplas instâncias de banco de dados. Evite uso de LIKE, ILIKE. Prefira Full Text Search(tsearch2) Use Indíces com moderação. Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  22. 22. . . . e seu DBA feliz! Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  23. 23. Ferramentas auxiliares Tuning SQL. . . EXPLAIN ANALYZE test_base=# EXPLAIN ANALYZE SELECT foo FROM bar; Ferramentas gráficas Pgfouine Pgadmin3 PhpPgAdmin Cedrus Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  24. 24. http://explain-analyze.info ... Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  25. 25. 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
  26. 26. Pgfouine - http://pgfouine.projects.postgresql.org Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  27. 27. Pgadmin3 - http://www.pgadmin.org/ Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  28. 28. Pgadmin3 - http://www.pgadmin.org/ Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  29. 29. PhpPgAdmin - http://phppgadmin.sourceforge.net/ Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  30. 30. PhpPgAdmin - http://phppgadmin.sourceforge.net/ Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  31. 31. Cedrus - http://sourceforge.net/projects/cedrus Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  32. 32. Cedrus - http://sourceforge.net/projects/cedrus Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  33. 33. Ferramentas auxiliares Manutenção. . . Autovacuum X Vacuum Depende do uso (Aplicações Web, OLTI, BI) Vacuum vacuum_cost_delay: tempo de atraso para vacuum executar automaticamente nas tabelas grandes Autovacuum (Habilitado por padrão à partir do 8.3) autovacuum_naptime: tempo de espera para execução do autovacuum. Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  34. 34. Ferramentas auxiliares Ferramentas de Stress. . . Pgbench: no diretório do contrib do PostgresSQL, padrão de transações do tipo TPC-B. DBT-2: Ferramenta da OSDL, padrão de transações do tipo TPC-C. BenchmarkSQL: Ferramenta Java para benchmark em SQL para vários banco de dados (JDBC), padrão de transações do tipo TPC-C. Jmeter: Ferramenta Java genérica para testes de stress, usado para aplicações (Web, ...) e também pode ser direto para um banco de dados. Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
  35. 35. 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 de conexõ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
  36. 36. 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
  37. 37. 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
  38. 38. Conclusão Contatos: fernando.ike@b2br.com.br fernando.ike@gmail.com http://www.midstorm.org/~fike/weblog Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo

×