如何获取postgresql中正在运行的查询的执行计划?

2024-03-25

我有一个未优化的查询,它在一天中的不同时间运行一系列不同的执行时间,从 1 分钟到 14 小时不等。 CPU 利用率、内存和数据库上的其他并发负载保持不变,什么会导致这种变化?请注意,自动真空过程在午夜运行,并且性能在早上显着提高。我的断言是,由于表碎片、死元组和大量读取,同一张表的统计信息发生变化,从而生成不同的执行计划。为了证明这个断言,我想获取当前正在运行的查询的查询计划。请注意,我不可能简单地EXPLAIN执行前的查询。


等一下,我已经成功了。在 postgresql.conf 中有两个用于预加载库的设置。第一个,shared_preload_libraries,如果不重新启动就无法工作。但另一个 session_preload_libraries 会。因此,编辑 postgresql.conf 以在其中添加以下行:

session_preload_libraries = 'auto_explain'

然后重新加载:

pg_ctl reload (or pg_ctlcluster 9.x main reload etc)

然后更改数据库以将其打开:

alter database smarlowe set auto_explain.log_min_duration=1;

然后所有新连接都会获得 auto_explained 计划。

将持续时间更改为对您最有意义的毫秒设置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取postgresql中正在运行的查询的执行计划? 的相关文章

随机推荐