如何在重载下强制停止长postgres查询?

时间:2015-03-10 13:00:30

标签: sql performance postgresql system

我正在使用Ubuntu上的Postgres开发Rails应用程序。不幸的是,这个遗留应用程序在数据库中使用了一些重量级的存储过程。更重要的是,数据库非常大(5GB),我的电脑也不是特别快。时不时地,如果我将一些不良参数从我的代码传递到数据库,我的计算机变得非常慢到我无法进入控制台并杀死postgres进程的程度。我假设,这是由于一些非常昂贵的数据库查询。我唯一的解决方案是硬重置我的笔记本电脑。所以我的问题是 - 有没有办法强行杀死一个长期的查询?或者,有没有办法限制db允许使用的CPU和RAM,这样我还有一些资源可以去手动重启postgres?

1 个答案:

答案 0 :(得分:6)

您可以使用statement_timeout配置选项设置语句的最长时间:

  

从命令从客户端到达服务器的时间开始,中止任何超过指定毫秒数的语句。如果log_min_error_statement设置为ERROR或更低,则还会记录超时的语句。值为零(默认值)会将其关闭。

您可以通过多种方式设置此选项,例如每个人postgresql.confSET命令每个会话,甚至每个数据库或每个角色。有关设置选项的更多信息,请参见the documentation