Postgresql 8.3:限制每个查询的资源消耗

Ada*_*tan 12 postgresql performance

我正在使用PostgreSQL 8.3 + PostGIS 1.3Ubuntu 8.04 Hardy上存储地理空间数据。

这个特定版本的 PostGIS 在计算buffer()非常复杂的段时有一个错误,这会导致查询占用越来越多的内存,直到整个机器卡住。

我正在寻找一种 PostgreSQL 机制,它可以:

  • 限制特定查询使用的内存消耗(可能还有其他资源)。
  • 自动停止执行时间超过某个阈值的查询。

有任何想法吗?

Pet*_*aut 9

为了限制内存消耗,主要的配置参数是work_mem。由于这适用于每个操作,而不是每个查询,如果您想花费 N 量的内存,您不能简单地将它设置为 N,但您必须稍微调整和调整它以获得所需的结果。

但是,这在服务器代码或扩展中出现错误和其他内存泄漏的情况下无济于事。您可以使用由 控制的特定于进程的资源限制来控制它ulimit。但是,如果您达到限制并且内存分配失败,您希望发生什么?它可能不会表现得太好。更好地修复这些错误或使用不同的版本。

执行时间超过阈值的停止查询,使用参数`statement_timeout',例如,

SET statement_timeout TO '10min';
Run Code Online (Sandbox Code Playgroud)