查询进度指示
来自 PostgreSQL wiki
跳转到导航跳转到搜索编辑:这里有一个2013 年的演示文稿。该演示文稿的源代码在这里.
Postgres 当前不会向用户提供有关查询执行过程的任何有意义的反馈。这将对以下方面非常有用:
- 报告查询执行是否被锁阻塞;许多 #postgresql 用户对他们的查询为何需要如此长时间执行感到困惑,而实际上它被锁阻塞了 - 这难道不能从 pg_stat_activity 中的 "waiting" 布尔值中轻松获得吗?
- 报告长时间运行的分析查询的进度。当交互式地执行复杂的长运行查询时,提供有关它们需要多长时间才能执行的反馈(以及期间的近似答案)会很酷
- 报告长时间运行的实用程序查询的进度。例如,很难预测大型 CREATE INDEX 的运行时间是分钟还是小时;同样,手动 VACUUM 的进度也很难准确估计
这在 DBMS 文献中已经讨论过(见下文)。直觉上,我认为实现 #1 和 #3 应该很容易(可能需要 FE/BE 更改),但 #2 需要一些思考。
Oracle 已经有了类似的东西。任何执行时间超过 6 秒的操作都会自动在V$SESSION_LONGOPS 中进行跟踪。跟踪是在执行计划的步骤级别(例如 "TABLE SCAN","12344 ov 654764 blocks read")进行的。
在 PostgreSQL 9.6 中,引入了用于上述 (3) 的通用工具
以下是使用它的示例
相同内容的文档
参考资料
相关论文
相关的 pgsql-hackers 线程