Monitoramento de Desempenho PostgreSQL

pg_stat_user_tables

Esta visão do sistema fornece métricas detalhadas sobre o comportamento das tabelas de usuários. As colunas incluem identificadores da tabela, nome do esquema e da tabela, contagens de varreduras sequenciais e por índice, além de operações DML. Observa-se também o número de tuplas vivas e mortas, informações sobre operações VACUUM e atualizações quentes (hot updates), que ocorrem dentro da mesma página.

Ao consultar esta visão, é possível identificar tabelas com alto uso de varreduras sequenciais em comparação a varreduras por índice, entender padrões de modificação (inserções, atualizações, exclusões) e avaliar a quantidade de dados mortos (dead tuples) presentes.

SELECT nome_tabela, varreduras_seq, leituras_seq_tuplas
FROM pg_stat_user_tables
WHERE esquema = current_schema() AND varredura_indice < varredura_seq
ORDER BY varredura_seq DESC;

-- Consulta alternativa para listar tabelas ordenadas por contagem de tuplas vivas
SELECT nome_tabela, tuplas_vivas
FROM pg_stat_user_tables
ORDER BY tuplas_vivas DESC;

Análise do Uso de Índices

No PostgreSQL, as visões do sistema pg_stat_all_indexes e pg_stat_user_indexes oferecem dados sobre o desempenho dos índices. A primeira contém estatísticas para todos os índices (incluindo os do sistema), enquanto a segunda se limita aos índices pertencentes ao usuário atual. Ambas compartilham colunas como nome do índice, nome da tabela, esquema, contagem de varreduras e operações de modificação.

  • nome_indice: Identificador do índice.
  • nome_tabela: Nome da tabela associada.
  • nome_esquema: Esquema da tabela.
  • varreduras_indice: Número de vezes que o índice foi utilizado em varreduras. Um valor baixo pode indicar um índice subutilizado, candidato a remoção.
  • tuplas_lidas_indice: Quantidade de tuplas lidas através do índice.
  • tuplas_obtidas_indice: Número de tuplas de dados recuperadas usando o índice.

Monitorar essas métricas ajuda a identificar índices frequentemente acessados e aqueles que são raramente usados. Remover índices ineficazes pode reduzir o consumo de espaço em disco e melhorar a performance de operações de escrita (INSERT, UPDATE, DELETE).

pg_statio_user_tables

Esta visão foca no desempenho de E/S (Entrada/Saída) para tabelas de usuários. As colunas incluem a contagem de blocos lidos do disco e acertados no cache para o heap (dados da tabela), índices, TOAST e índices TOAST.

  • heap_blocos_lidos / heap_blocos_acertados: Métricas para os blocos de dados principais.
  • ind_blocos_lidos / ind_blocos_acertados: Métricas para blocos de índices.
  • toast_blocos_lidos / toast_blocos_acertados: Métricas para blocos TOAST (dados estendidos).
  • tidx_blocos_lidos / tidx_blocos_acertados: Métricas para índices TOAST.

Valores altos em heap_blocos_lidos e ind_blocos_lidos sugerem que o parâmetro shared_buffers pode estar dimensionado de forma inusficiente, levando a leituras frequentes do disco ou do cache do sistema operacional.

pg_stat_bgwriter

A visão pg_stat_bgwriter oferece insights sobre o processo de escrita em background e a estratégia de gerenciamento de cache. As métricas incluem a contagem de checkpoints (programados e requisitados), o número de buffers escritos durante checkpoints, e operações de limpeza realizadas pelo escritor em background ou por processos de backend.

  • checkpoints_programados / checkpoints_requisitados: Tipos de pontos de controle.
  • buffers_checkpoint: Buffers gravados no disco durante checkpoints.
  • buffers_limpos: Buffers limpos pelo procseso de escrita em background.
  • buffers_backend: Buffers descarregados por processos de cliente, indicando possível sobrecarga.
  • buffers_alocados: Novos buffers alocados.

Esses dados são cruciais para diagnosticar gargalos de E/S e ajustar parâmetros como checkpoint_completion_target e bgwriter_delay.

Consultas para Tamanho de Tabelas

Para determinar o espaço ocupado pelas tabelas, consultas específicas podem ser empregadas.

SELECT 
    nome_objeto, 
    pg_size_pretty(pg_relation_size(oid)) AS tamanho_formatado
FROM 
    pg_stat_user_tables
WHERE 
    esquema = 'public'
ORDER BY 
    pg_relation_size(oid) DESC;

Consultas para Tamanho de Índices

SELECT 
    nome_indice::regclass AS nome_indice,
    pg_size_pretty(pg_relation_size(oid_indice)) AS tamanho_indice
FROM 
    pg_index
ORDER BY 
    pg_relation_size(oid_indice) DESC;

Atividade de Sessões com pg_stat_activity

A visão pg_stat_activity fornece informações em tempo real sobre as sessões ativas no banco de dados, incluindo detalhes como ID da sessão, usuário, endereço do cliente e a consulta em execução. É uma ferramenta essencial para monitorar o estado atual do sistema.

Consultas de Espaço por Tabela (Dados e Índices)

Para uma análise detalhada do consumo de espaço por tabela, incluindo a separação entre dados e índices, pode-se usar a seguinte consulta:

SELECT 
    tabela,
    pg_size_pretty(pg_total_relation_size(caminho_completo)) AS tamanho_total,
    pg_size_pretty(pg_indexes_size(caminho_completo)) AS tamanho_indices,
    pg_size_pretty(pg_total_relation_size(caminho_completo) - pg_indexes_size(caminho_completo)) AS tamanho_dados
FROM 
    information_schema.tables
WHERE 
    tipo_tabela = 'BASE TABLE'
    AND nome_esquema NOT IN ('pg_catalog', 'information_schema')
ORDER BY 
    pg_total_relation_size(caminho_completo) DESC;

Nota: Na consulta acima, caminho_completo representa a concatenação do esquema e nome da tabela, como '"' || nome_esquema || '"."' || tabela || '"'.

Consultas de Espaço por Banco de Dados

SELECT 
    nome_banco AS "Nome do Banco de Dados",
    pg_size_pretty(pg_database_size(nome_banco)) AS "Tamanho"
FROM 
    pg_database;

Tags: postgresql monitoramento-desempenho consultas-sql visoes-sistema otimizacao-indices

Publicado em 6-30 02:59