análise de performance usando as estatísticas do postgresql

41
An´ alise de performance usando as estat´ ısticas do PostgreSQL Matheus de Oliveira <[email protected]> * Keynote apresentada no PGDay Campinas 2014

Upload: matheus-de-oliveira

Post on 21-Nov-2014

209 views

Category:

Technology


0 download

DESCRIPTION

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.

TRANSCRIPT

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

Analise de performance usando as estatısticas do PostgreSQL

Matheus de Oliveira<[email protected]>

* Keynote apresentada no PGDay Campinas 2014

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

Quem sou eu?

Matheus de Oliveira • Ciencias de Computacao – 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 estatısticas nopgAnalytics (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 napratica”

• Mais de 10 anos na estrada• Mais de 10 mil profissionais capacitados em todo o

Brasil.• http://www.dextraining.com.br/

2 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Quem sou eu?

Matheus de Oliveira • Ciencias de Computacao – 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 estatısticas 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 napratica”

• Mais de 10 anos na estrada• Mais de 10 mil profissionais capacitados em todo o

Brasil.• http://www.dextraining.com.br/

2 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Quem sou eu?

Matheus de Oliveira • Ciencias de Computacao – 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 estatısticas 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 napratica”

• Mais de 10 anos na estrada• Mais de 10 mil profissionais capacitados em todo o

Brasil.• http://www.dextraining.com.br/

2 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Quem sou eu?

Matheus de Oliveira • Ciencias de Computacao – 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 estatısticas 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 napratica”

• Mais de 10 anos na estrada• Mais de 10 mil profissionais capacitados em todo o

Brasil.• http://www.dextraining.com.br/

2 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

We are Hiring

Interessados:

[email protected]

http://www.dextra.com.br/carreiras/

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

Estatısticas do PostgreSQL

Basicamente 2 tipos de estatısticas:

• estatısticas de distribuicao dos dados

• estatısticas de analise e monitoramento

4 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Estatısticas de distribuicao dedados

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

It’s all about performance...

• O PostgreSQL prove:

◦ Mecanismos de cache eficiente◦ Estruturas de dados eficientes◦ Diversos metodos de acesso

6 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

It’s all about performance...

• Para isso, o PostgreSQL precisa de:◦ Mecanismos de cache eficiente

• voce precisa oferecer recursos e configurar para seu uso otimizado

◦ Estruturas de dados eficientes

• voce precisa comandar a criacao dessas estruturas

◦ Diversos metodos de acesso

• necessario informacoes estatısticas sobre os dados para escolha do melhor• voce geralmente nao precisa se preocupar com isso... :)• mas as vezes precisa... : (

7 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

It’s all about performance...

• Para isso, o PostgreSQL precisa de:◦ Mecanismos de cache eficiente

• voce precisa oferecer recursos e configurar para seu uso otimizado

◦ Estruturas de dados eficientes

• voce precisa comandar a criacao dessas estruturas

◦ Diversos metodos de acesso

• necessario informacoes estatısticas sobre os dados para escolha do melhor• voce geralmente nao precisa se preocupar com isso... :)• mas as vezes precisa... : (

7 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

It’s all about performance...

• Para isso, o PostgreSQL precisa de:◦ Mecanismos de cache eficiente

• voce precisa oferecer recursos e configurar para seu uso otimizado

◦ Estruturas de dados eficientes

• voce precisa comandar a criacao dessas estruturas

◦ Diversos metodos de acesso

• necessario informacoes estatısticas sobre os dados para escolha do melhor• voce geralmente nao precisa se preocupar com isso... :)• mas as vezes precisa... : (

7 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

It’s all about performance...

• Para isso, o PostgreSQL precisa de:◦ Mecanismos de cache eficiente

• voce precisa oferecer recursos e configurar para seu uso otimizado

◦ Estruturas de dados eficientes

• voce precisa comandar a criacao dessas estruturas

◦ Diversos metodos de acesso

• necessario informacoes estatısticas sobre os dados para escolha do melhor

• voce geralmente nao precisa se preocupar com isso... :)• mas as vezes precisa... : (

7 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

It’s all about performance...

• Para isso, o PostgreSQL precisa de:◦ Mecanismos de cache eficiente

• voce precisa oferecer recursos e configurar para seu uso otimizado

◦ Estruturas de dados eficientes

• voce precisa comandar a criacao dessas estruturas

◦ Diversos metodos de acesso

• necessario informacoes estatısticas sobre os dados para escolha do melhor• voce geralmente nao precisa se preocupar com isso... :)

• mas as vezes precisa... : (

7 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

It’s all about performance...

• Para isso, o PostgreSQL precisa de:◦ Mecanismos de cache eficiente

• voce precisa oferecer recursos e configurar para seu uso otimizado

◦ Estruturas de dados eficientes

• voce precisa comandar a criacao dessas estruturas

◦ Diversos metodos de acesso

• necessario informacoes estatısticas sobre os dados para escolha do melhor• voce geralmente nao precisa se preocupar com isso... :)• mas as vezes precisa... : (

7 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Indices... Indices... Indices...

1

8 16 28

1 7 8 9 12 16 21 25 28 30 32 36

B−tree Tabela:

28

12

9

7

8

16

25

30

32

21

36

...

...

...

...

...

...

...

...

...

...

...

...

8 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Indices... Indices... Indices...

Buscas em ındices sao melhores quando:

• deseja-se encontrar um valor unico ou uma pequena faixa devalores

E nao sao boas quando:

• a busca retorna grande parte da tabela

E como o PostgreSQL sabe qual a proporcao de uma tabela aconsulta ira retornar?

9 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Indices... Indices... Indices...

Buscas em ındices sao melhores quando:

• deseja-se encontrar um valor unico ou uma pequena faixa devalores

E nao sao boas quando:

• a busca retorna grande parte da tabela

E como o PostgreSQL sabe qual a proporcao de uma tabela aconsulta ira retornar?

9 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Histogramas

10 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Histogramas

SELECT * FROM vendasWHERE dtvenda

BETWEEN ’2013 -07 -01 ’AND ’2013 -12 -31 ’;

Pequena porcao da tabela(∼= 4% da tabela):

usar acesso indexado

11 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Histogramas

SELECT * FROM vendasWHERE dtvenda

BETWEEN ’2014 -01 -01 ’AND ’2014 -06 -31 ’;

Grande porcao da tabela (∼= 82%da tabela):

usar acesso sequencial

12 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Outras Informacoes

Alem dos histogramas – pg stats.histogram bounds 1 –, saoarmazenadas outras estatısticas, como:

• Seletividade dos atributos (numero de elementos distintos) –pg stats.n distinct

• Correlacao dos atributos (ordenacao fısica) –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 apresentadoaqui, mas segue a mesma ideia

13 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Estatısticas do PostgreSQL

• Estatısticas da distribuicao dos dados:

◦ sao atualizadas sob demanda pelo autovacuum (voce nao precisafazer isso)

◦ armazenadas na tabela de catalogo pg statistic (use a viewpg stats para consultar)

◦ utilizadas pelo planejador de consultas◦ se ficarem desatualizadas podem degradar a performance do sistema

drasticamente

14 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Estatısticas do PostgreSQL

• Estatısticas da distribuicao dos dados:◦ sao atualizadas sob demanda pelo autovacuum (voce nao precisa

fazer isso)◦ armazenadas na tabela de catalogo pg statistic (use a view

pg stats para consultar)◦ utilizadas pelo planejador de consultas◦ se ficarem desatualizadas podem degradar a performance do sistema

drasticamente

14 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Estatısticas para Analise eMonitoramento

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

Estatısticas para Analise e Monitoramento

• Durante operacao, os processos incrementam contadores emedidores de tempo das operacoes realizadas (numero de tuplasinseridas numa tabela, tempo de escrita dos dados em disco,utilizacao de um ındice, etc.)

• Cada processo envia essas informacoes via comunicacao UDP parao stats collector

• O stats collector armazena esses dados em estruturas especiais

• O resultado sumarizado dessas informacoes estao presentes paraconsulta em views especiais, nomeadas pg stat * epg statio *

16 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Verificacao do uso de memoria

• Verificacao 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 parashared buffers

17 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Verificacao do processo de CHECKPOINTs

• Verificando escrita de buffers pelo processo checkpointer VSbackends 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), valoresproximos a 0, 0 podem indicar a necessidade de forcar mais

CHECKPOINTs ou aumentar a shared buffers

18 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Verificacao do processo de CHECKPOINT

• Verificacao das requisicoes de CHECKPOINT pelapg 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 valoresmuito baixos podem indicar necessidade de aumento do

parametro checkpoint segments ou reducao docheckpoint timeout

19 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Utilizacao de Arquivos Temporarios

• Tambem utilizando a pg stat database, podemos ver otamanho de arquivos temporarios gerados:

=> SELECT pg_size_pretty ( sum ( temp_bytes ))-> AS size-> FROM pg_stat_database ;

size-- -------

2500 MB(1 row )

Utilizacao de arquivos temporarios degenera a performance, podeser preciso aumentar o work mem

20 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Verificacao de Tabelas com Muito “Seq-Scans”

• Usando a visao 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 | 0cidades | 84 | 826

...

Que tal olhar com carinho as consultas dessas tabelas? Maslembre-se, para tabelas pequenas ou consultas que trazem

grandes porcoes da tabela “seq-scan” nao e ruim

21 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Verificacao de Indices Nao Utilizados

• Para informacoes de ındices especıficos usamos apg stat user indexes:

=> SELECT relname , indexrelname-> FROM pg_stat_user_indexes-> WHERE idx_scan = 0;

relname | indexrelname-- -------+--------------------

vendas | vendas_total_idxvendas | vendas_empresa_idx

...

Indices nao utilizados, muitas vezes podem ser removidos. Masnem sempre!

22 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Nem tudo sao flores...

• Como fazer a analise dessas estatısticas apenas num dadoperıodo?

• Elas sao incrementais, logo englobam um grande perıodo detempo:

=> SELECT stats_reset FROM pg_stat_database-> WHERE datname = current_database ();

stats_reset-- -----------------------------

2014 -04 -28 01:56:51.790651 -03(1 row )

23 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Nem tudo sao flores...

• Como fazer a analise dessas estatısticas apenas num dadoperıodo?

• Elas sao incrementais, logo englobam um grande perıodo detempo:

=> SELECT stats_reset FROM pg_stat_database-> WHERE datname = current_database ();

stats_reset-- -----------------------------

2014 -04 -28 01:56:51.790651 -03(1 row )

23 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Reinicializacao das Estatısticas

Estatısticas sao zeradas quando:

• uma queda do sistema acontece (ou “stop immediate” e usado)

• e feita a chamada das funcoes pg stat reset epg stat reset shared

Reiniciar as estatısticas inviabiliza a operacao plena do autovacuum

24 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Reinicializacao das Estatısticas

Estatısticas sao zeradas quando:

• uma queda do sistema acontece (ou “stop immediate” e usado)

• e feita a chamada das funcoes pg stat reset epg stat reset shared

Reiniciar as estatısticas inviabiliza a operacao plena do autovacuum

24 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Solucoes...

• Salvar snapshot de estatısticas:

=> CREATE TABLE stat_bgwriter_20140910-> AS SELECT * FROM pg_stat_bgwriter ;=> CREATE TABLE stat_database_20140910-> AS SELECT * FROM pg_stat_database ;

25 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Solucoes...

Apenas essas estatısticas nao vao ser suficientes, voce precisa:

• Verificacao dos comandos SQL executados no banco de dados:◦ buscar consultas direto da aplicacao :/◦ modulo pg stat statement◦ uso de analise de logs (pg log/)

• Informacoes historicas (snapshots, graficos, etc.)

• Controle das alteracoes realizadas no ambiente

26 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Resumindo...

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

Resumo das Estatısticas

pg statistic pg stat * / pg statio *Quem? manualmente

autovacuumtodos os processos

Quando? manualmentesob-demanda

o tempo todo

Como? INSERT, UPDATE,DELETE

UDP para o stats collector

Onde? tabelapg statistic

arquivo(s) no diretorio$PGDATA/pg stat

Pra que? planejador de consul-tas

autovacuum, monitoramento,analise

28 / 29Analise de performance usando as estatısticas do PostgreSQL – Matheus de Oliveira – PGDay Campinas 2014

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

Obrigado!

Duvidas?

Matheus de Oliveira<[email protected]>

IRC – irc.freenode.net:/join #postgresql,#postgresql-br,#dextra

Meu nick: MatheusOl

Twitter: @matioli matheusLinkedIn: br.linkedin.com/in/matheusdeoliveira/

SlideShare: slideshare.net/matheus de oliveira