我有一个未优化的查询,它在一天中的不同时间运行一系列不同的执行时间,范围从1分钟到14小时。 CPU利用率,内存和数据库上的其他并发负载保持不变,可能导致这种变化?请注意,自动真空过程在午夜运行,并且性能在早上得到显着改善。我的断言是由于表碎片,死元组和大量读取,同一个表上的统计信息会发生变化,从而产生不同的执行计划。为了证明这个断言,我想得到当前查询运行的查询计划。请注意,在执行之前,我无法简单地EXPLAIN
查询。
答案 0 :(得分:1)
等我运转了。在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计划。
将持续时间更改为对您最有意义的毫秒设置。