gpt4 book ai didi

sql - PostgreSQL:是否可以打印正在运行的查询的查询计划?

转载 作者:行者123 更新时间:2023-12-04 10:27:05 24 4
gpt4 key购买 nike

我定期运行相同的报告查询,并且大部分时间查询在几分钟内完成。然而,它有时会以一种不确定的方式卡住几个小时。当它卡住时,我用 EXPLAIN ANALYZE 重复了相同的查询。 ,但后者很快完成。

为什么会这样?如何获得正在运行的查询的执行计划?

最佳答案

生成执行计划时,PostgreSQL query planner relies heavily on table statistics .统计数据由 ANALYZE 更新命令和 the autovacuum process .
在您的情况下,似乎大多数情况下统计信息都是正确的,但有时它们会过时,从而导致查询计划效率低下。它可能发生在批量行插入或更新之后。

要在查询完成后查看查询计划,请使用 auto_explain模块。例如,以下命令将 session 配置为记录持续超过一小时的所有查询的计划:

LOAD 'auto_explain';
SET auto_explain.log_min_duration = '1h';
SET auto_explain.log_analyze = true;

参数也可以在 postgresql.conf 中设置。必须在查询开始之前加载模块。

如果你想获得一个已经运行的查询的计划,并且不想等待它完成,你可以使用 https://github.com/StarfishStorage/explain-running-query提供的外部脚本。 .该脚本基于 auto_explain模块。它将 gdb 附加到 PostgreSQL 后端进程,并打印查询计划。

关于sql - PostgreSQL:是否可以打印正在运行的查询的查询计划?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60592143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com