他のバージョンの文書 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

19.12. ロック管理

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は、経験的に十分であると証明されていますが、単一のトランザクションで数多くの異なるテーブルをいじる問い合わせがいる場合、たとえば、数多くの子テーブルを持つ親テーブルの問い合わせなど、この値を大きくする必要があるかも知れません。 このパラメータはサーバ起動時のみ設定されます。

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

max_pred_locks_per_transaction (integer)

共有記述ロックテーブル(shared predicate lock table)は、max_pred_locks_per_transaction * (max_connections + max_prepared_transactions)オブジェクト(例えば諸テーブル)のロックを追跡します。 従って、この数以上の明確なオブジェクトは同時にロックされません。 このパラメータはそれぞれのトランザクションに対して割り当てられたオブジェクトのロックの平均数を管理します。 個別のトランザクションはロックテーブル内の全てのトランザクションのロックが適合する限り、より多くのオブジェクトをロックできます。 これはロック可能な行数ではありません。その値は無制限です。 デフォルトは64で、テストでは一般的に充分ですが、単一のシリアライザブルトランザクションで数多くの異なるテーブルに触れるクライアントが存在する場合、この値を大きくする必要があることがあります。 このパラメータはサーバ起動時のみ設定可能です。

max_pred_locks_per_relation (integer)

リレーション全体をカバーするロックに昇格する前に、一つリレーションの中で述語ロックできるページ数あるいはタプル数を指定します。 0以上の値は、絶対的な制限を表し、負の数はmax_pred_locks_per_transactionをその絶対値で割ったものを表します。 デフォルトは-2で、以前のバージョンのPostgreSQLの振る舞いを維持します。 このパラメータはpostgresql.confファイル、または、サーバのコマンドラインのみで設定可能です。

max_pred_locks_per_page (integer)

ページ全体をカバーするロックに昇格する前に、一つページの中で述語ロックできる行数を指定します。 デフォルトは2です。 このパラメータはpostgresql.confファイル、または、サーバのコマンドラインのみで設定可能です。