首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres会自动清除卡住的查询吗?

Postgres会自动清除卡住的查询吗?
EN

Database Administration用户
提问于 2023-03-07 00:13:50
回答 1查看 121关注 0票数 0

以postgres实例中的以下块为例:

代码语言:javascript
复制
postgres=> SELECT pid, query_start from pg_stat_activity ORDER BY pid;
  pid  |          query_start          
-------+-------------------------------
   374 | 
   375 | 
   376 | 
   377 | 
   380 | 
  1185 | 2023-03-07 00:06:49.97674+00
  1222 | 2023-03-07 00:06:56.795915+00
  3449 | 2023-03-06 21:57:26.409735+00
  3518 | 2023-03-07 00:06:57.661874+00
 17950 | 2023-03-07 00:06:57.590964+00
 17951 | 2023-03-07 00:06:57.659922+00
 17952 | 2023-03-07 00:06:57.659469+00
 17953 | 2023-03-07 00:06:57.656676+00
 17954 | 2023-03-07 00:06:57.647601+00
(14 rows)

显然,PID 3449的查询被卡住了,它挂了两个多小时。我不想用pg_backend_terminate(pid)手动清理卡住的查询。

Postgres会自动清除卡住的查询吗?如果是,什么时候?我能否将Postgres配置为在一定的间隔长度之后自动终止PID?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2023-03-07 01:22:16

默认情况下,PostgreSQL不会自动终止滞留的查询。它依赖于管理员使用pg_terminate_backend()pg_cancel_backend()手动干预和终止它们。

但是,PostgreSQL确实提供了一种使用statement_timeout参数为查询设置超时的方法。设置时,如果查询运行时间超过指定的超时时间,PostgreSQL将自动终止查询并释放其资源。

可以在会话级别或全局设置此参数。例如,若要全局将超时设置为1小时,可以将以下行添加到postgresql.conf文件中:

代码语言:javascript
复制
statement_timeout = 3600000

不建议在statement_timeout中设置postgresql.conf,因为它会影响所有会话。

或者,可以通过运行以下SQL命令,在每个会话的基础上设置超时:

代码语言:javascript
复制
SET statement_timeout = '1h';

请注意,将超时设置得太低会导致合法查询过早终止。您应该将其设置为适合您的用例的值。

参考文献:

票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/324450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档