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

标签 sql performance postgresql system

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

最佳答案

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

Abort any statement that takes more than the specified number of milliseconds, starting from the time the command arrives at the server from the client. If log_min_error_statement is set to ERROR or lower, the statement that timed out will also be logged. A value of zero (the default) turns this off.

您可以通过多种方式设置此选项,例如在 postgresql.conf 中为每个人设置,每个 session 使用 SET命令,甚至每个数据库或每个角色。有关设置选项的更多信息,请参阅 the documentation .

关于sql - 如何在重负载下强制停止长 postgres 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28964408/

相关文章:

sql - 如何通过比较一个表中的值与另一个表中的值来填充SQL中的列

sql - SQL 顺序困惑

java - 如何减少图表引擎中饼图的边距大小?

jquery - : $ (".elt", $this) 或 $this.find (".elt"); 哪个更快?

java - "operator does not exist: uuid = bytea"Java 与 Postgres

mysql - 如何使用 SQL 创建文件夹

mysql语句返回语法错误

javascript - 如何组织JS加载?

php - 我怎样才能启用moodle?

sql - 使用 PostgreSQL 的交叉表查询中的计数和总和无效