Postgresql 8.3:クエリごとのリソース消費を制限する


12

私が使用しているPostgreSQLの8.3 + のPostGIS 1.3で地理空間データを格納するためのUbuntu 8.04ハーディ

この特定のバージョンのPostGISには、buffer()非常に複雑なセグメントで計算するときにバグがあり、マシン全体がスタックするまでクエリがますます多くのメモリを消費します。

私はできるPostgreSQLメカニズムを探しています:

  • 特定のクエリで使用されるメモリ消費(およびおそらく他のリソース)を制限します。
  • 実行時間が特定のしきい値を超えるクエリを自動的に停止します。

何か案は?


なぜあなたが噛みつくバグがあるバージョンを使い続けるのですか?修正されたバージョンを使用すると、問題はなくなります。
フランクヘイケンズ

確かに、コードにバグがあったり、クエリに時間がかかりすぎたりすることがあります。ログエラーメッセージでそれらが死ぬことを望みます。
アダムマタン

回答:


9

メモリ消費を制限するための主要な構成パラメーターはwork_memです。これはクエリごとではなく操作ごとに適用されるため、N個のメモリを使用する場合は単にNに設定することはできませんが、目的の結果を得るには少し調整して調整する必要があります。

ただし、これは、サーバーコードまたは拡張機能のバグやその他のメモリリークの場合には役立ちません。によって制御されるプロセス固有のリソース制限でそれを制御できulimitます。しかし、制限に達してメモリの割り当てが失敗した場合、何が起こりますか?おそらくあまりうまく動作しません。これらのバグを修正するか、別のバージョンを使用してください。

実行時間がしきい値を超えたクエリを停止するには、パラメータ「statement_timeout」を使用します。たとえば、

SET statement_timeout TO '10min';

すごい。まさに私が探していたもの。
アダムマタン

2

見ていPostgresのウィキを

PostgreSQLには、特定のユーザー、クエリ、またはデータベースが消費するリソースを制限したり、1人のユーザー/クエリ/データベースが他のユーザー/クエリ/データベースよりも多くのリソースを取得するように優先順位を設定する機能がありません。制限された優先順位付けが可能なものを実現するには、オペレーティングシステム機能を使用する必要があります。

ユーザーごとまたはデータベースごとにパフォーマンス設定を調整できますが、特定のクエリをいつ中止するかは調整できません。


+1クラスター全体が消費できるメモリ量の最大値を設定するのはどうですか?
アダムマタン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.