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.
PRODUCT OPS - COMO APROVEITAR O MÁXIMO DESTA NOVA TENDÊNCIA - Priscila Chagas...
Análise de performance usando as estatísticas do PostgreSQL
1. Analise de performance usando as estatsticas do PostgreSQL
Matheus de Oliveira
matheus.oliveira@dextra.com.br
* Keynote apresentada no PGDay Campinas 2014
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. 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. 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. 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. 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. We are Hiring
Interessados:
recrutamento@dextra.com.br
http://www.dextra.com.br/carreiras/
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
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. It's all about performance...
Para isso, o PostgreSQL precisa de:
Mecanismos de cache e
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. It's all about performance...
Para isso, o PostgreSQL precisa de:
Mecanismos de cache e
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. It's all about performance...
Para isso, o PostgreSQL precisa de:
Mecanismos de cache e
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
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. 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. Histogramas
10 / 29
Analise de performance usando as estatsticas do PostgreSQL { Matheus de Oliveira { PGDay Campinas 2014
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. 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. 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. 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. 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. 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
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
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
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
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. 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
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
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. 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. 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. 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. 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. 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
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. 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
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