pg_stat_activity不断显示由于statement_timeout而超时的查询



我在pg_stat_activity上使用以下查询来查找当前正在运行的查询:

SELECT pid, age(clock_timestamp(), query_start), usename, query, *
FROM pg_stat_activity
WHERE query != '<IDLE>' AND query NOT ILIKE '%pg_stat_activity%' and usename='<db_user>'
ORDER BY query_start desc;

我已经使用以下查询为该用户设置了一个satement_timeout为30s:

ALTER ROLE <db_user> set statement_timeout = 30000

我通过为db_user:打开一个新会话来验证这一设置

show statement_timeout;
statement_timeout|
-----------------|
30s              |

我运行这个查询,它在预期的30秒后超时。

SELECT pg_sleep(31);
SQL Error [57014]: ERROR: canceling statement due to statement timeout

然而,在这之后,当我运行第一个查询以查看正在运行的查询时,它会向我显示超时的查询以及

查询<db_user><db_user>
pid年龄用户名
913300:00:54.366638COMMIT
3155100:01:49.70594¶选择pg_sleep(31(

您的监控查询严重过时。'<IDLE>'最后一次用作"中空闲查询的标记;查询";字段。在较新的版本中;状态";列,在这种情况下将显示"事务中空闲(中止(",而";查询";列将继续显示最近的查询,即使它不再运行。

query列中,您可以看到该连接上的最后一个查询。这并不意味着查询处于活动状态。检查pg_stat_activitystate列——可能是idle,因为查询已终止。

最新更新