Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

3,636 views

Published on

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.

Published in: Technology

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

×