如何在高负载情况下强制停止长时间运行的PostgreSQL查询?

3
我正在使用Ubuntu上的Rails应用程序和Postgres。不幸的是,这个遗留的应用程序在数据库中使用了一些重量级存储过程。而且,数据库相当大(5GB),我的电脑也不是特别快。偶尔,如果我从代码向数据库传递一些错误的参数,我的电脑会变得非常缓慢,以至于我无法进入控制台并杀死postgres进程。我认为,这是由于一些非常昂贵的数据库查询引起的。我的唯一解决方案是强制重置我的笔记本电脑。因此,我的问题是 - 是否有一种方法可以强制终止长时间运行的查询?或者,是否有一种限制允许数据库使用的CPU和RAM的方法,以便我仍然有一些资源可以手动重新启动postgres?

1
pg_terminate_backend(): http://www.postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADMIN-SIGNAL-TABLE - user330315
1个回答

6
您可以使用statement_timeout配置选项为语句设置最长执行时间:

如果从客户端发出命令到服务器的指定毫秒数内未完成,将会中止该语句。如果将log_min_error_statement设置为ERROR或更低级别,则超时的语句也将被记录在日志中。默认值为零,表示关闭此功能。

您可以通过各种方式设置此选项,例如在postgresql.conf文件中为所有用户设置,在每个会话中使用SET命令进行设置,甚至可以针对每个数据库或角色进行设置。有关设置选项的更多信息,请参阅文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接