Pergunta

Estou configurando um aplicativo da web com back-end FreeBSD PostgreSQL.Estou procurando alguma ferramenta/técnica de otimização de desempenho de banco de dados.

Foi útil?

Solução

pgfouine funciona bastante bem para mim.E parece que há um Porta FreeBSD por isso.

Outras dicas

A otimização do banco de dados geralmente é uma combinação de duas coisas

  1. Reduza o número de consultas ao banco de dados
  2. Reduza a quantidade de dados que precisam ser analisados ​​para responder a consultas

A redução da quantidade de consultas geralmente é feita armazenando em cache dados não voláteis/menos importantes (por exemplo,"Quais usuários estão online" ou "Quais são as postagens mais recentes deste usuário?") dentro do aplicativo (se possível) ou em um armazenamento de dados externo - mais eficiente - (memcached, redis, etc.).Se você tiver informações muito difíceis de escrever (por exemplo,contadores de visitas) e não precisa ÁCIDO-semântica, você também pode pensar em movê-lo do banco de dados Postgres para armazenamentos de dados mais eficientes.

Otimizar o tempo de execução da consulta é mais complicado - isso pode significar criar índices especiais (ou índices em primeiro lugar), alterando (possivelmente desnormalizando) o modelo de dados ou alterando a abordagem fundamental que o aplicativo adota quando se trata de trabalhar com o banco de dados.Veja por exemplo o Paginação feita do jeito Postgres falar por Markus Winand sobre como repensar o conceito de paginação para torná-lo mais eficiente no banco de dados

Medindo consultas de maneira lenta

Mas para entender quais consultas devem ser analisadas primeiro você precisa saber com que frequência elas são executadas e quanto tempo duram em média.

Uma abordagem para isso é registrar todas as consultas (ou "lentas"), incluindo seu tempo de execução e, em seguida, analisar o log de consultas.Uma boa ferramenta para isso é pgfouine que já foi mencionado anteriormente nesta discussão, desde então foi substituído por pgbadger que é escrito em uma linguagem mais amigável, é muito mais rápido e mantido de forma mais ativa.

Ambos pgfouine e pgbadger sofrem com o fato de que eles precisam do log de consultas habilitado, o que pode causar um impacto perceptível no desempenho do banco de dados ou causar problemas de espaço em disco, além do fato de que a análise do log com a ferramenta pode levar algum tempo e não vai fornecer insights atualizados sobre o que está acontecendo no banco de dados.

Acelerando com extensões

Para resolver essas deficiências, existem agora duas extensões que rastreiam o desempenho da consulta diretamente no banco de dados - pg_stat_statements (que só é útil na versão 9.2 ou mais recente) e pg_stat_plans.Ambas as extensões oferecem a mesma funcionalidade básica - rastrear a frequência com que uma determinada "consulta normalizada" (string de consulta menos todos os literais de expressão) foi executada e quanto tempo levou no total.Devido ao fato de que isso é feito enquanto a consulta é realmente executada, isso é feito de maneira muito eficiente, a sobrecarga mensurável foi inferior a 5% em benchmarks sintéticos.

Entendendo os dados

A lista de consultas em si é muito "seca" do ponto de vista informativo.Tem havido trabalho em uma terceira extensão tentando resolver esse fato e oferecer uma representação melhor dos dados chamada pg_statsinfo (juntamente com pg_stats_reporter), mas é um pouco trabalhoso colocá-lo em funcionamento.

Para oferecer uma solução mais conveniente para este problema comecei a trabalhar em um projeto comercial focado em pg_stat_statements e pg_stat_plans e aumenta as informações coletadas por muitos outros dados retirados do banco de dados.É chamado pganalyze e você pode encontrá-lo em https://pganalyze.com/.

Para oferecer uma visão geral concisa de ferramentas e projetos interessantes na área de monitoramento do Postgres também comecei a compilar uma lista no Wiki do Postgres que é atualizado regularmente.

Eu usei pgtop um pouco.É bastante grosseiro, mas pelo menos posso ver qual consulta está sendo executada para cada ID de processo.

Tentei o pgfouine, mas se bem me lembro, é uma ferramenta offline.

Também sigo o arquivo psql.log e defino os critérios de registro em um nível onde posso ver as consultas problemáticas.

#log_min_duration_statement = -1        # -1 is disabled, 0 logs all statements
                                        # and their durations, > 0 logs only
                                        # statements running at least this time.

Eu também uso o EMS Postgres Manager para fazer trabalho administrativo geral.Ele não faz nada por você, mas facilita a maioria das tarefas e simplifica a revisão e a configuração do seu esquema.Acho que, ao usar uma GUI, é muito mais fácil detectar inconsistências (como índice ausente, critérios de campo, etc.).É apenas um dos dois programas que estou disposto a usar o VMWare no meu Mac.

Munin é bastante simples, mas eficaz, para obter tendências de evolução e desempenho do banco de dados ao longo do tempo.No kit padrão do Munin você pode, entre outras coisas, monitorar o tamanho do banco de dados, número de bloqueios, número de conexões, varreduras sequenciais, tamanho do log de transações e consultas de longa duração.

Fácil de configurar e começar e, se necessário, você pode escrever seu próprio plugin com bastante facilidade.

Confira os plug-ins postgresql mais recentes fornecidos com Munin aqui:

http://munin-monitoring.org/browser/branches/1.4-stable/plugins/node.d/

Bem, a primeira coisa a fazer é tentar todas as suas consultas do psql usando "explicar" e ver se há varreduras sequenciais que podem ser convertidas em varreduras de índice adicionando índices ou reescrevendo a consulta.

Fora isso, estou tão interessado nas respostas a esta pergunta quanto você.

Confira o Lightning Admin, ele possui uma GUI para capturar instruções de log, não é perfeita, mas funciona muito bem para a maioria das necessidades. http://www.amsoftwaredesign.com

DBTuna http://www.dbtuna.com/postgresql_monitor.php recentemente começou a oferecer suporte ao monitoramento PostgreSQL.Nós o usamos extensivamente para monitoramento do MySQL, portanto, se ele fornecer o mesmo para o Postgres, deverá ser uma boa opção para você também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top