Postgres: Como posso ver todas as instruções SQL sendo executadas pelo servidor de banco de dados?

23

Estou no processo de revisar todas as instruções SQL que um aplicativo faz no banco de dados, por razões de desempenho. Existe uma maneira fácil de registrar todas as instruções executadas pelo servidor de banco de dados PostgreSQL? Obrigado.

Jin Kim
fonte
Neste seguinte explicação é explicado sobre como ver atual running consulta tutorialdba.com/2016/11/pgstatactivity-view-explanation-in.html
nijam

Respostas:

27

A opção de configuração que você está procurando é log_statement = "all"(se você apenas deseja as instruções) ou log_min_statement_duration = <some number>se está apenas após consultas "lentas" (para algum valor de "lento"). Consulte http://www.postgresql.org/docs/current/static/runtime-config-logging.html para obter mais detalhes sobre a configuração de log.

mulher
fonte
1
O registro de todas as instruções é prejudicial ao desempenho (conforme declarado nos documentos oficiais). No entanto, o 8.4 possui um bom recurso para obter explain analyzeuma consulta lenta no empate em que foi executado. Você pode começar a testar com isso, pois o 8.4 ainda não foi lançado, mas é uma boa opção saber que aconteceu no momento da execução. , se a analisar explicar saída é OK você provavelmente está correndo em problemas com I / o ou limites de CPU, mas pelo menos você vai saber que não é a própria consulta
serverhorror
5
Eu realmente gosto da opção log_statement = 'mod'. Ele mostra apenas cria, atualiza e exclui e ignora todas as instruções de seleção. Ótimo se você está tentando descobrir qual código está ajustando algum campo.
22610 Don Kirkby
5

O auto_explainmódulo é muito útil para isso. Ele não apenas registra as instruções, mas também registra seus planos de execução e pode até registrar as instruções executadas nas funções do PL / PgSQL. O impacto no desempenho é razoavelmente baixo, a menos que você ative a análise; nesse caso, você incorre em um pouco de tempo para todas as consultas.

Veja auto_explainna documentação.

Craig Ringer
fonte
Observe que "auto_explain" é um módulo e, portanto, não é executado nos bancos de dados do AWS RDS Postgres :(
johntellsall
1
@johntellsall O RDS suporta auto_explain, está na lista de módulos abençoados. Consulte a documentação em docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…
Craig Ringer
3

Obviamente, você pode detectar as consultas mais lentas por conta própria, mas eu recomendo que você use o pgFouine - um analisador de logs do PostgreSQL. É fácil de instalar e realmente útil.

Relatórios de amostra: aqui e aqui .

Severe_admin
fonte
Eu usei o pgFouine em um projeto e identifiquei vários lugares em que um índice ajudaria bastante as coisas.
Paul Tomblin