1
我有一个未优化的查询,在1分钟到14小时的不同时间运行一系列不同的执行时间。数据库上的CPU利用率,内存和其他并发负载保持不变,可能会导致这种变化?请注意,自动真空过程在午夜运行,并且性能在早上大幅度提高。我的断言是,由于表碎片,死元组和大量的读取,同一个表上的统计信息发生变化,从而产生不同的执行计划。为了证明这个断言,我想获得正在运行的当前查询的查询计划。请注意,我不可能在执行前简单地使用EXPLAIN
查询。如何获得postgresql中正在运行的查询的执行计划?
https://www.postgresql.org/docs/current/static/auto-explain.html –
AFAIU,这将需要重新启动数据库,这也不是一个选项。此外,这对于为所有长时间运行的查询产生查询计划而不仅仅是有关的查询。 –
1:这不需要重新启动,最多只能重新加载。 2:PostgreSQL必须为每个查询生成查询计划(除非它已经准备好了,否则它只会制定一次计划)。 3:这里唯一的开销是记录最小的查询计划。只需将auto_explain.log_min_duration设置为10000即可,因此它必须是10秒查询等。 –