ロックとインデックス

Postgres は テーブルのデータを対象とした「ブロックされない読み込み/書き込み」を 備えています.しかしこの機能は Postgres に実装されている個々のインデックス・アクセスメソッドにはありません.

インデックスの種類ごとの扱いは,以下のようになっています.

GiST および R-Tree インデックス

読み込み/書き込みアクセスに共有/排他モードのインデックスレベル ロックを使います.ロックは文の処理完了後に開放されます.

ハッシュインデックス

読み込み/書き込みアクセスに共有/排他モードのページレベルロックを 使います.ロックはページ処理後に開放されます.

ページレベルロックは,インデックスレベルのロックよりも同時実行性に 優れていますが,デッドロックも起きやすくなります.

B-Tree インデックス

読み込み/書き込みアクセスに共有/排他モードのページレベルラッチを 使います.ラッチはインデックスのタプルが挿入/フェッチされると 直ちに開放されます.

B-Tree インデックスは,デッドロック状態になることなく, 最も高い同時実行性を提供します.