pg_stat_activity 一直显示由于 statement_timeout 而超时的查询
pg_stat_activity keeps showing the query which has timeout due to statement_timeout
我在 pg_stat_activity 上使用以下查询来查找当前 运行ning 的查询:
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 设置为 30 秒:
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
然而在这之后,当我 运行 第一个查询查看哪些查询是 运行ning 时,它也显示了超时查询
pid
年龄
用户名
查询
9133
00:00:54.366638
提交
31551
00:01:49.70594
¶SELECT pg_sleep(31)
为什么在查询pg_stat_activity时仍然显示超时查询。我希望由于此查询已终止,因此它一定不会出现在 pg_stat_activity.
中
在 query
列中,您会看到该连接上的最后一个查询。这确实 不 暗示查询处于活动状态。检查 pg_stat_activity
的 state
列 – 它可能是 idle
,因为查询已终止。
您的监控查询已经过时了。在 9.1 版中,“”最后一次用作“查询”字段中空闲查询的标记。在比那个更新的版本中,有一个单独的“状态”列,在这种情况下将显示 'idle in transaction (aborted)',而“查询”列将继续显示最近的查询,即使它不再是 运行.
我在 pg_stat_activity 上使用以下查询来查找当前 运行ning 的查询:
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 设置为 30 秒:
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
然而在这之后,当我 运行 第一个查询查看哪些查询是 运行ning 时,它也显示了超时查询
pid | 年龄 | 用户名 | 查询 |
---|---|---|---|
9133 | 00:00:54.366638 | 提交 | |
31551 | 00:01:49.70594 | ¶SELECT pg_sleep(31) |
为什么在查询pg_stat_activity时仍然显示超时查询。我希望由于此查询已终止,因此它一定不会出现在 pg_stat_activity.
中在 query
列中,您会看到该连接上的最后一个查询。这确实 不 暗示查询处于活动状态。检查 pg_stat_activity
的 state
列 – 它可能是 idle
,因为查询已终止。
您的监控查询已经过时了。在 9.1 版中,“