他のバージョンの文書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

Chapter 9. 同時実行制御

Table of Contents
9.1. 序文
9.2. トランザクションの隔離
9.2.1. リードコミッティド隔離レベル
9.2.2. シリアライザブル隔離レベル
9.3. 明示的ロック
9.3.1. テーブルレベルロック
9.3.2. 行レベルロック
9.3.3. デッドロック
9.4. アプリケーションレベルでのデータの一貫性チェック
9.5. ロックとインデックス

この節では同時に2 つ以上のセッションが同じデータにアクセスしようとした場合、PostgreSQL データベースシステムがどう振る舞うかについて説明します。 このような状況でデータの整合性を確実に保つ一方、すべてのセッションに対して効果的なアクセスを許可するようにすることが目的です。 データベースアプリケーションを開発する方は、本節で扱われている内容を熟知していなければなりません。

9.1. 序文

同時実行制御のためにロック機構を使用している伝統的なデータベースシステムとは異なり、PostgreSQL はデータ整合性の維持に多版方式 (多版型同時実行制御 (Multiversion Concurrency Control) MVCC) を使用しています。つまり、データベースへの問い合わせ実行の際、各トランザクションは処理の基礎となっているデータの現在の状態に拘らず、遡ったある時点におけるスナップショット(データベースバージョン)を参照する、というものです。これは、同時に並行している(別の)トランザクションが同じ行を更新することによって引き起こす整合性を欠いたデータの参照からトランザクションを保護し、それぞれのデータベースセッションに対してトランザクションの隔離を提供します。

多版方式とロック方式との最大の相違点は、MVCCでは問い合わせ(読み込み)ロックの獲得と、書き込みロックの獲得が競合しません。したがって、読み込みは書き込みを絶対にブロックしませんし、書き込みも読み込みをブロックすることがありません。

MVCC の動作に簡単には適応できないアプリケーションのために、PostgreSQL ではテーブルレベルおよび行レベルのロック機能も使用可能です。 とは行っても、MVCC を適切に使用すると通常ロックよりもパフォーマンスが良くなります。