Se você não monitora o Postgres, você não está falando sério.
É o ano de 2024 e o Postgres mantém o ritmo. A ascensão de pg_vetor, Supabase e Néon alimentar a adoção do Postgres. Esta postagem analisa as ferramentas e práticas recomendadas para monitorar seu banco de dados Postgres.
Ferramentas de código aberto
pg_stat_statements
A primeira coisa é habilitar o pg_stat_statements
extensão.
CREATE EXTENSION pg_stat_statements;
Sair do modo de tela cheia
pg_stat_statements
rastreia estatísticas de planejamento e execução de todas as instruções SQL executadas por um servidor. É também um pré-requisito para outras soluções de monitoramento mais avançadas.
psql=# SELECT query, calls, total_exec_time, rows, 100.0 * shared_blks_hit /
nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 5;
-( RECORD 1 )---+--------------------------------------------------------------------
query | UPDATE pgbench_tellers SET tbalance = tbalance + $1 WHERE tid = $2
calls | 3000
total_exec_time | 20756.669379
rows | 3000
hit_percent | 100.0000000000000000
Sair do modo de tela cheia
explica.dalibo.com
explica.dalibo.com é uma UI da web para visualizar os planos de consulta EXPLAIN do Postgres. Também é código aberto no GitHub e pode ser incorporado em seus próprios aplicativos da web.
Exportador Prometheus Postgres
Exportador Prometheus Postgres extrair métricas do banco de dados Postgres e armazená-las no Prometheus. A partir daí, você pode usar o Prometheus Alertmanager para configurar regras de alerta e usar o Grafana para criar painéis.
Soluções Proprietárias
analisar
analisar é um serviço de observabilidade específico do Postgres. Ele fornece ajuste SQL detalhado e monitoramento de desempenho. Para o plano Scale, ele começa com US$ 399 por mês, incluindo 4 servidores de banco de dados, cada servidor adicional custa US$ 100.
DataDog
DataDog fornece Monitoramento de banco de dados Postgres. Seu monitoramento Postgres não é tão extenso quanto o pganalyze. A vantagem do DataDog é sua integração com toda a pilha de aplicativos e o pipeline de CI/CD. O preço começa em US$ 70 por servidor de banco de dados por mês.
Outras opções
- pgDash tem um conjunto de recursos e preços semelhantes aos do pganalyze. pgDash parece menos polido. Por outro lado, o pgDash oferece opção de auto-hospedagem para todos os planos, enquanto o pganalyze oferece apenas opção de auto-hospedagem para o plano Enterprise.
Melhores Práticas
Monitorar o contorno do ID da transação
Devido à implementação MVCC do PostgreSQL, ele possui um infame encapsulamento do ID da transação risco. Quando isso acontecer, todo o banco de dados ficará indisponível, veja alguns incidentes anteriores (MailChimp, Figura). Todo serviço de monitoramento Postgres e provedor de serviços de banco de dados capaz pode verificar este risco:
Bloqueios de monitoramento
Usar pg_locks visualizar para encontrar quaisquer problemas de bloqueio. Você pode encontrar conexões que mantiveram bloqueios por muito tempo, bem como conexões que esperaram muito para adquirir o bloqueio.
Você também deve considerar ativar log_lock_waits.
Evite bloquear operações
É sempre uma boa prática definir lock_timeout no usuário.
Ao fazer alterações em DDL, tente usar instruções sem bloqueio. por exemplo, adicione índice com CONCORRENTEMENTEadicione restrição com NÃO VÁLIDO.
Você pode configurar Revisão SQL no Bytebase e detectar tais antipadrões.
Use um provedor de serviços Cloud Postgres
Todos os principais provedores de serviços de banco de dados Postgres possuem monitoramento básico pronto para uso. Se você precisar se auto-hospedar por motivos de orçamento ou conformidade, poderá começar com a configuração do Prometheus/Grafana e atualizar para pganalyze/DataDog conforme o negócio cresce.
Uma solução de monitoramento abrangente pode ser intimidante. Tentamos fornecer sugestões práticas para empresas em diferentes estágios. Por favor, deixe-nos saber se você tem outras ferramentas de monitoramento e melhores práticas que valem a pena compartilhar para pastorear o elefante.