postgres postgresql estatisticas

Estatísticas

Coletor de estatísticas

Um dos processos iniciados pelo postmaster é o stats collector, ou coletor de estatísticas. Ele é responsável por agregar estatísticas geradas pelos backends e disponibilizá-las de volta aos backends, para serem usadas em otimizações de consultas e rotinas de manutenção, e para uso externo, como para monitoramento e inspeção do administrador.

Tais estatísticas incluem contadores de acesso a blocos e tuplas (configuração track_counts), número de tuplas vivas e mortas, tempos de acesso a disco (configuração track_io_timing), chamadas a funções (configuração track_functions), sobre o comando em execução em cada backend (configuração track_activities) e outras. Mas como a mensuração de cada uma dessas estatísticas incute um custo de tempo ou outros recursos do servidor, elas são configuráveis e algumas vêm desabilitadas por padrão.

O coletor de estatísticas comunica as estatísticas aos outros processos por arquivos temporários em stats_temp_directory, que pode ser montado em um sistema de arquivos em memória. As estatísticas são persistidas entre reinícios do serviço através dos objetos em pg_stat. Quando o PostgreSQL passa por uma recuperação (restauração de backup, replicação, início após parada immeditate…), os contadores de estatística são zerados.

Visões do sistema

Existe uma grande variedade de visões de sistema que dão visibilidade às estatísticas e ao estado geral do sistema.

Cada visão tem um conjunto diferente de atributos, que é melhor consultado da documentação.

Algumas visões retornam sempre o estado atual do sistema, independentemente do estado da transação:

visão descrição
pg_stat_activity Estado dos processos de servidor, com uma linha por conexão estabelecida e uma linha por processo interno do PostgreSQL
pg_stat_replication Estado do envio da replicação
pg_stat_wal_receiver Estado do recebimento da replicação
pg_stat_subscription Estado das assinaturas de replicação física
pg_stat_ssl Estado das conexões por SSL
pg_stat_gssapi Estado das conexões por GSSAPI
pg_stat_progress_analyze Progresso de comandos ANALYZE e autoanalyzes
pg_stat_progress_basebackup Progresso de backups
pg_stat_progress_cluster Progresso de comandos CLUSTER e VACUUM FULL
pg_stat_progress_create_index Progresso de comandos CREATE INDEX e REINDEX
pg_stat_progress_vacuum Progresso de comandos VACUUM e autovacuums

Outras retornam as estatísticas acumuladas pelo coletor ou pela transação atual, que podem apresentar uma diferença, dado que os processos não enviam dados ao coletor sob demanda ou em tempo real, mas sim quando estão para ter tempo ocioso:

visão descrição
pg_stat_archiver Estatísticas sobre o arquivador de WAL
pg_stat_bgwriter Estatísticas sobre o background writer
pg_stat_database Estatísticas sobre os bancos de dados
pg_stat_database_conflicts Estatísticas sobre transações canceladas por conflitos com réplicas
pg_stat_{all,sys,user}_{tables,indexes} Estatísticas sobre acessos a tabelas e índices, pré-filtradas para objetos de usuário (user), de sistema (sys) ou todos (all)
pg_stat_xact_{all,sys,user}_{tables,indexes} Estatísticas sobre acessos a tabelas e índices, pré-filtradas para objetos de usuário (user), de sistema (sys) ou todos (all), mas contabilizando também as estatísticas acumuladas pela transação atual, antes de serem enviadas ao coletor
pg_statio_{all,sys,user}_{tables,indexes, sequences} Estatísticas sobre padrões de acesso a disco (I/O) em tabelas, índices e sequências, pré-filtrados para objetos de usuário (user), de sistema (sys) ou todos (all)
pg_stat_user_functions Estatísticas sobre execuções de funções de usuário
pg_stat_xact_user_functions Estatísticas sobre execuções de funções de usuário, mas consultando apenas estatísticas acumuladas pela transação atual, antes de seren enviadas ao coletor

Funções

Além das visões, diversas funções de sistema nos ajudam a inspecionar e a monitorar as estatísticas do PostgreSQL. Algumas das mais úteis são:

função descriçao
pg_backend_pid() Retorna o pid do backend tratando esta sessão
pg_stat_get_activity(pid) Retorna algumas das informações da visão pg_stat_activity
pg_stat_reset() Reseta as estatísticas do banco de dados atual
pg_stat_reset_shared(text) Reseta algumas estatísticas globais (como das visões do archiver e bgwriter)
pg_stat_reset_single_table_counters(oid) Reseta estatísticas de uma tabela
pg_stat_reset_single_function_counters(oid) Reseta estatísticas de uma função de usuário