9.7. ロックとインデックス

Postgresは、テーブルデータへの 「ノンブロック読み込み/書き込みアクセス」を備えています。しかし現在、 この機能はPostgresで実装されているすべての インデックスアクセスメソッドに対して実装されていません。

あらゆるインデックス型は下記のように扱われます。

GiST と R-Tree インデックス

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

ハッシュインデックス

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

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

Btree インデックス

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

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

つまり、Btreeインデックスは並列実行アプリケーションに推奨されます。