Análise de performance usando as estatísticas do PostgreSQL

2.888 visualizações

Publicada em

Essa palestra desmitifica as estatísticas do PostgreSQL abordando todo o sistema de coleta de dados estatísticos, as tabelas disponíveis atualmente, conceitos, técnicas e exemplos de consultas úteis para performance e monitoramento do PostgreSQL.

Publicada em: Tecnologia
  • Seja o primeiro a comentar

Análise de performance usando as estatísticas do PostgreSQL

  1. 1. Analise de performance usando as estatsticas do PostgreSQL Matheus de Oliveira matheus.oliveira@dextra.com.br * Keynote apresentada no PGDay Campinas 2014
  2. 2. Quem sou eu? Matheus de Oliveira Ci^encias de Computac~ao { USP DBA PostgreSQL na Dextra e instrutor na Dextraining a mais de 2 anos Apaixonado pelo PG (do psql ao codigo-fonte...) 2 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  3. 3. Quem sou eu? Matheus de Oliveira Ci^encias de Computac~ao { USP DBA PostgreSQL na Dextra e instrutor na Dextraining a mais de 2 anos Apaixonado pelo PG (do psql ao codigo-fonte...) Aplicando atualmente uso de estatsticas no pgAnalytics (http://pganalytics.com.br/) 2 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  4. 4. Quem sou eu? Matheus de Oliveira Ci^encias de Computac~ao { USP DBA PostgreSQL na Dextra e instrutor na Dextraining a mais de 2 anos Apaixonado pelo PG (do psql ao codigo-fonte...) Aplicando atualmente uso de estatsticas no pgAnalytics (http://pganalytics.com.br/) Dextra Desenvolvimento sob-medida, consultoria/suporte Mais de 15 anos trabalhando com o PostgreSQL Crafting Software, Transforming Business http://www.dextra.com.br/ 2 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  5. 5. Quem sou eu? Matheus de Oliveira Ci^encias de Computac~ao { USP DBA PostgreSQL na Dextra e instrutor na Dextraining a mais de 2 anos Apaixonado pelo PG (do psql ao codigo-fonte...) Aplicando atualmente uso de estatsticas no pgAnalytics (http://pganalytics.com.br/) Dextra Desenvolvimento sob-medida, consultoria/suporte Mais de 15 anos trabalhando com o PostgreSQL Crafting Software, Transforming Business http://www.dextra.com.br/ Dextraining Treinamento de verdade, Aprenda com quem faz na pratica Mais de 10 anos na estrada Mais de 10 mil pro
  6. 6. ssionais capacitados em todo o Brasil. http://www.dextraining.com.br/ 2 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  7. 7. We are Hiring Interessados: recrutamento@dextra.com.br http://www.dextra.com.br/carreiras/
  8. 8. Estatsticas do PostgreSQL Basicamente 2 tipos de estatsticas: estatsticas de distribuic~ao dos dados estatsticas de analise e monitoramento 4 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  9. 9. Estatsticas de distribuic~ao de dados
  10. 10. It's all about performance... O PostgreSQL prov^e: Mecanismos de cache e
  11. 11. ciente Estruturas de dados e
  12. 12. cientes Diversos metodos de acesso 6 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  13. 13. It's all about performance... Para isso, o PostgreSQL precisa de: Mecanismos de cache e
  14. 14. ciente Estruturas de dados e
  15. 15. cientes Diversos metodos de acesso 7 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  16. 16. It's all about performance... Para isso, o PostgreSQL precisa de: Mecanismos de cache e
  17. 17. ciente voc^e precisa oferecer recursos e con
  18. 18. gurar para seu uso otimizado Estruturas de dados e
  19. 19. cientes Diversos metodos de acesso 7 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  20. 20. It's all about performance... Para isso, o PostgreSQL precisa de: Mecanismos de cache e
  21. 21. ciente voc^e precisa oferecer recursos e con
  22. 22. gurar para seu uso otimizado Estruturas de dados e
  23. 23. cientes voc^e precisa comandar a criac~ao dessas estruturas Diversos metodos de acesso 7 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  24. 24. It's all about performance... Para isso, o PostgreSQL precisa de: Mecanismos de cache e
  25. 25. ciente voc^e precisa oferecer recursos e con
  26. 26. gurar para seu uso otimizado Estruturas de dados e
  27. 27. cientes voc^e precisa comandar a criac~ao dessas estruturas Diversos metodos de acesso necessario informac~oes estatsticas sobre os dados para escolha do melhor 7 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  28. 28. It's all about performance... Para isso, o PostgreSQL precisa de: Mecanismos de cache e
  29. 29. ciente voc^e precisa oferecer recursos e con
  30. 30. gurar para seu uso otimizado Estruturas de dados e
  31. 31. cientes voc^e precisa comandar a criac~ao dessas estruturas Diversos metodos de acesso necessario informac~oes estatsticas sobre os dados para escolha do melhor voc^e geralmente n~ao precisa se preocupar com isso... :) 7 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  32. 32. It's all about performance... Para isso, o PostgreSQL precisa de: Mecanismos de cache e
  33. 33. ciente voc^e precisa oferecer recursos e con
  34. 34. gurar para seu uso otimizado Estruturas de dados e
  35. 35. cientes voc^e precisa comandar a criac~ao dessas estruturas Diversos metodos de acesso necessario informac~oes estatsticas sobre os dados para escolha do melhor voc^e geralmente n~ao precisa se preocupar com isso... :) mas as vezes precisa... : ( 7 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  36. 36. Indices... Indices... Indices... B−tree Tabela: 1 8 16 28 1 7 8 9 12 16 21 25 28 30 32 36 28 12 21 7 9 16 25 30 32 8 36 ... ... ... ... ... ... ... ... ... ... ... ... 8 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  37. 37. Indices... Indices... Indices... Buscas em ndices s~ao melhores quando: deseja-se encontrar um valor unico ou uma pequena faixa de valores E n~ao s~ao boas quando: a busca retorna grande parte da tabela 9 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  38. 38. Indices... Indices... Indices... Buscas em ndices s~ao melhores quando: deseja-se encontrar um valor unico ou uma pequena faixa de valores E n~ao s~ao boas quando: a busca retorna grande parte da tabela E como o PostgreSQL sabe qual a proporc~ao de uma tabela a consulta ira retornar? 9 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  39. 39. Histogramas 10 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  40. 40. Histogramas SELECT * FROM vendas WHERE dtvenda BETWEEN ’2013 -07 -01 ’ AND ’2013 -12 -31 ’; Pequena porc~ao da tabela (= 4% da tabela): usar acesso indexado 11 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  41. 41. Histogramas SELECT * FROM vendas WHERE dtvenda BETWEEN ’2014 -01 -01 ’ AND ’2014 -06 -31 ’; Grande porc~ao da tabela (= 82% da tabela): usar acesso sequencial 12 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  42. 42. Outras Informac~oes Alem dos histogramas { pg stats.histogram bounds 1 {, s~ao armazenadas outras estatsticas, como: Seletividade dos atributos (numero de elementos distintos) { pg stats.n distinct Correlac~ao dos atributos (ordenac~ao fsica) { pg stats.correlation Atributos mais comuns { pg stats.most common * Media de tamanho dos atributos { pg stats.avg width Entre outras... 1OBS: o histograma do PostgreSQL e um pouco diferente do apresentado aqui, mas segue a mesma ideia 13 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  43. 43. Estatsticas do PostgreSQL Estatsticas da distribuic~ao dos dados: 14 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  44. 44. Estatsticas do PostgreSQL Estatsticas da distribuic~ao dos dados: s~ao atualizadas sob demanda pelo autovacuum (voc^e n~ao precisa fazer isso) armazenadas na tabela de catalogo pg statistic (use a view pg stats para consultar) utilizadas pelo planejador de consultas se
  45. 45. carem desatualizadas podem degradar a performance do sistema drasticamente 14 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  46. 46. Estatsticas para Analise e Monitoramento
  47. 47. Estatsticas para Analise e Monitoramento Durante operac~ao, os processos incrementam contadores e medidores de tempo das operac~oes realizadas (numero de tuplas inseridas numa tabela, tempo de escrita dos dados em disco, utilizac~ao de um ndice, etc.) Cada processo envia essas informac~oes via comunicac~ao UDP para o stats collector O stats collector armazena esses dados em estruturas especiais O resultado sumarizado dessas informac~oes est~ao presentes para consulta em views especiais, nomeadas pg stat * e pg statio * 16 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  48. 48. Veri
  49. 49. cac~ao do uso de memoria Veri
  50. 50. cac~ao de uso de cache pela pg stat database: = SELECT sum ( blks_hit ) / - sum (( blks_read + blks_hit ):: numeric ) - FROM pg_stat_database - WHERE blks_read + blks_hit 0; cache_ratio -- ---------------------- 0.73245583731133246875 (1 row ) Valores muito baixo podem indicar pouca memoria para shared buffers 17 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  51. 51. Veri
  52. 52. cac~ao do processo de CHECKPOINTs Veri
  53. 53. cando escrita de buers pelo processo checkpointer VS backends pg stat bgwriter: = SELECT buffers_checkpoint / - ( buffers_checkpoint + buffers_backend ) - :: numeric AS checkpointer_ratio - FROM pg_stat_bgwriter ; checkpointer_ratio -- ------------------ 0.923462373 (1 row ) Buscamos um valor mais alto (sendo 1; 0 a taxa ideal), valores proximos a 0; 0 podem indicar a necessidade de forcar mais CHECKPOINTs ou aumentar a shared buffers 18 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  54. 54. Veri
  55. 55. cac~ao do processo de CHECKPOINT Veri
  56. 56. cac~ao das requisic~oes de CHECKPOINT pela pg stat bgwriter: = SELECT checkpoints_timed / - ( checkpoints_timed + checkpoints_req ) - :: numeric AS timed_ratio - FROM pg_stat_bgwriter ; timed_ratio -- ----------- 0.769053117 (1 row ) Tambem buscamos taxas proximas a 1; 0, sendo que valores muito baixos podem indicar necessidade de aumento do par^ametro checkpoint segments ou reduc~ao do checkpoint timeout 19 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  57. 57. Utilizac~ao de Arquivos Temporarios Tambem utilizando a pg stat database, podemos ver o tamanho de arquivos temporarios gerados: = SELECT pg_size_pretty (sum ( temp_bytes )) - AS size - FROM pg_stat_database ; size -- ------- 2500 MB (1 row ) Utilizac~ao de arquivos temporarios degenera a performance, pode ser preciso aumentar o work mem 20 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  58. 58. Veri
  59. 59. cac~ao de Tabelas com Muito Seq-Scans Usando a vis~ao pg stat user tables: = SELECT relname , seq_scan , idx_scan - FROM pg_stat_user_tables - ORDER BY seq_scan DESC LIMIT 10; relname | seq_scan | idx_scan -- -------+----------+---------- vendas | 5586 | 0 cidades | 84 | 826 ... Que tal olhar com carinho as consultas dessas tabelas? Mas lembre-se, para tabelas pequenas ou consultas que trazem grandes porc~oes da tabela seq-scan n~ao e ruim 21 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  60. 60. Veri
  61. 61. cac~ao de Indices N~ao Utilizados Para informac~oes de ndices espec
  62. 62. cos usamos a pg stat user indexes: = SELECT relname , indexrelname - FROM pg_stat_user_indexes - WHERE idx_scan = 0; relname | indexrelname -- -------+-------------------- vendas | vendas_total_idx vendas | vendas_empresa_idx ... Indices n~ao utilizados, muitas vezes podem ser removidos. Mas nem sempre! 22 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  63. 63. Nem tudo s~ao ores... Como fazer a analise dessas estatsticas apenas num dado perodo? 23 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  64. 64. Nem tudo s~ao ores... Como fazer a analise dessas estatsticas apenas num dado perodo? Elas s~ao incrementais, logo englobam um grande perodo de tempo: = SELECT stats_reset FROM pg_stat_database - WHERE datname = current_database (); stats_reset -- ----------------------------- 2014 -04 -28 01:56:51.790651 -03 (1 row) 23 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  65. 65. Reinicializac~ao das Estatsticas Estatsticas s~ao zeradas quando: uma queda do sistema acontece (ou stop immediate e usado) e feita a chamada das func~oes pg stat reset e pg stat reset shared 24 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  66. 66. Reinicializac~ao das Estatsticas Estatsticas s~ao zeradas quando: uma queda do sistema acontece (ou stop immediate e usado) e feita a chamada das func~oes pg stat reset e pg stat reset shared Reiniciar as estatsticas inviabiliza a operac~ao plena do autovacuum 24 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  67. 67. Soluc~oes... Salvar snapshot de estatsticas: = CREATE TABLE stat_bgwriter_20140910 - AS SELECT * FROM pg_stat_bgwriter ; = CREATE TABLE stat_database_20140910 - AS SELECT * FROM pg_stat_database ; 25 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  68. 68. Soluc~oes... Apenas essas estatsticas n~ao v~ao ser su
  69. 69. cientes, voc^e precisa: Veri
  70. 70. cac~ao dos comandos SQL executados no banco de dados: buscar consultas direto da aplicac~ao :/ modulo pg stat statement uso de analise de logs (pg log/) Informac~oes historicas (snapshots, gra
  71. 71. cos, etc.) Controle das alterac~oes realizadas no ambiente 26 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  72. 72. Resumindo...
  73. 73. Resumo das Estatsticas pg statistic pg stat * / pg statio * Quem? manualmente autovacuum todos os processos Quando? manualmente sob-demanda o tempo todo Como? INSERT, UPDATE, DELETE UDP para o stats collector Onde? tabela pg statistic arquivo(s) no diretorio $PGDATA/pg stat Pra qu^e? planejador de consul-tas autovacuum, monitoramento, analise 28 / 29 Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
  74. 74. Obrigado! Duvidas? Matheus de Oliveira matheus.oliveira@dextra.com.br IRC { irc.freenode.net: /join #postgresql,#postgresql-br,#dextra Meu nick: MatheusOl Twitter: @matioli matheus LinkedIn: br.linkedin.com/in/matheusdeoliveira/ SlideShare: slideshare.net/matheus de oliveira

×