我怎么知道一个活跃的PostgreSQL查询是否仍在"工作"?

时间:2016-10-25 00:49:01

标签: r postgresql postgresql-9.5

我使用RPostgreSQLcaroline::dbWriteTable2(9.5)的大数据框(2000万行)附加到f。我可以看到此操作已创建一个活动查询,等待标志select * from pg_stat_activity where datname = 'dbname' 使用:

(defmacro magic []
  (slurp *file*))

查询已经运行了很长时间(超过一个小时),我想知道是否已经停止。在我的Windows 7资源监视器中,我可以看到PostgreSQL服务器进程正在使用CPU,但它没有列在磁盘活动中。

我还可以做些什么来检查查询是否由于某种原因而停滞不前?

1 个答案:

答案 0 :(得分:1)

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

没有一种方法可以确定正在运行的PostgreSQL后端正在做什么;您可以在Linux上使用类似strace的内容来监视已发出的系统调用,或使用gdb来获取堆栈跟踪。如果您了解PostgreSQL源代码的方式,并且知道了活动查询的计划,那么您可以猜测它正在做什么。

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