我如何知道一个活动的 PostgreSQL 查询是否仍然是 "working"?

How do I know whether an active PostgreSQL query is still "working"?

我正在使用 caroline::dbWriteTable2RPostgreSQL (9.5) 附加一个大数据框(2000 万行)。我可以看到此操作创建了一个活动查询,等待标志 f 使用:

select *
from pg_stat_activity
where datname = 'dbname'

查询已经运行很久了(一个多小时),不知道是不是卡住了。在我的 Windows 7 资源监视器中,我可以看到 PostgreSQL 服务器进程正在使用 CPU,但它未在磁盘 Activity.

中列出

我还能做些什么来检查查询是否因任何原因而停止?

基本上,如果后端正在使用 CPU 时间,则不会停止。 SQL 查询可以 运行 很长时间。

没有舒适的方法来确定正在运行的 PostgreSQL 后端当前正在做什么;您可以在 Linux 上使用 strace 之类的东西来监视发出的系统调用或 gdb 来获取堆栈跟踪。如果您熟悉 PostgreSQL 源代码,并且知道活动查询的计划,那么您就可以猜出它在做什么。

我的建议是看一下查询计划(EXAMINE),看看是否有一些昂贵的操作(高成本)。这可能会导致执行时间过长。