ロック管理

PostgreSQL 9.0.0文書
前のページ | 巻戻し | 第 18章サーバの設定 | 早送り | 次のページ

# 18.11. ロック管理

`deadlock_timeout` (`integer`)

  これは、デッドロック状態があるかどうかを調べる前にロックを待つ時間をミリ秒で計算したものです。 デッドロックの検査は比較的高価なので、サーバはロックを待つ度にこれを実行するわけではありません。 楽天的ですがデッドロックは実用レベルのアプリケーションでは頻繁に発生しないと仮定し、デッドロックの検査の前にしばらくはロック待ちをします。 この値を増やすことにより必要のないデッドロックの検査で無駄にされる時間は減りますが、本当にデッドロックがあった場合の報告が遅れます。 デフォルトは1秒（`1s`）で、おそらく実用の際にはこれ以上は必要でしょう。 負荷の大きいサーバではもっと必要かもしれません。 理想としてはこの設定は通常のトランザクションにかかる時間を超えているべきです。 そうすればロック待ちトランザクションがデッドロックの検査をする前にロックが解除される可能性が改善されます。

  log_lock_waitsが設定された場合、このパラメータはロック待機に関するログメッセージを出力する前の待機時間を決定します。 ロック遅延の調査を行う場合は、通常の`deadlock_timeout`よりも短い値を設定することを勧めます。

`max_locks_per_transaction` (`integer`)

  共有ロックテーブルは、`max_locks_per_transaction` * （max_connections + max_prepared_transactions）オブジェクト（例えばテーブル）上のロック追跡します。 したがって、ある時点でこの数以上の個々のオブジェクトをロックすることはできません。 このパラメータは各トランザクションで割り当てられるオブジェクトロックの平均値を制御します。 個々のトランザクションでは、このロックテーブルにすべてのトランザクションのロックが収まる限りオブジェクトのロックを獲得できます。 これは、ロックできる行数ではありません。この値には制限がありません。 デフォルトの64は、経験的に十分であると証明されていますが、単一のトランザクションで数多くの異なるテーブルをいじるクライアントがいる場合、この値を大きくする必要があるかも知れません。 このパラメータはサーバ起動時のみ設定されます。

  このパラメータを増加すると、使用しているオペレーティングシステムのデフォルト構成が許容するSystem V共有メモリの限界を越えた要求をPostgreSQLが行う原因となることがあります。 必要であれば、どの様にしてこのパラメータを調整するかについて項17.4.1を参照ください。

  待機サーバを稼動するとき、このパラメータを主サーバと同じか、より高い値に設定しなければなりません。 そうしないと、問い合わせは待機サーバに許可されません。

前のページ | ホーム | 次のページ
クライアント接続デフォルト | 上に戻る | バージョンとプラットフォーム互換性