我如何知道一个活动的 PostgreSQL 查询是否仍然是 "working"?
How do I know whether an active PostgreSQL query is still "working"?
我正在使用 caroline::dbWriteTable2
从 R
到 PostgreSQL
(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
),看看是否有一些昂贵的操作(高成本)。这可能会导致执行时间过长。
我正在使用 caroline::dbWriteTable2
从 R
到 PostgreSQL
(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
),看看是否有一些昂贵的操作(高成本)。这可能会导致执行时间过长。