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

Ale*_*pov 2 sql postgresql performance system

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

Dan*_*etz 6

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

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

您可以通过多种方式设置此选项,例如postgresql.conf适用于每个人,使用SET命令的每个会话,甚至每个数据库或每个角色.有关设置选项的更多信息,请参阅文档.