13.1. 序文

PostgreSQLは、データへの同時アクセスを管理するために高度な開発者向けツール群を提供します。 内部的に、データ一貫性は多版方式(多版型同時実行制御MVCC)を使用して管理されています。 つまり、データベースへの問い合わせ実行の際、各トランザクションは処理の基礎となっているデータの現在の状態にかかわらず、遡ったある時点におけるスナップショット(データベースバージョン)を参照する、というものです。 これは、同時に並行している(別の)トランザクションが同じ行を更新することによって引き起こす整合性を欠いたデータの参照からトランザクションを保護し、それぞれのデータベースセッションに対してトランザクションの隔離を提供します。 MVCCは、マルチユーザ環境で理想的な性能を得るために、伝統的なデータベースシステムで行われるような明示的なロック手法を避けることで、ロックの競合を最小化します。

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

MVCCの動作に簡単には適応できないアプリケーションのために、PostgreSQLではテーブルレベルおよび行レベルのロック機能も使用可能です。 とはいえ、MVCCを適切に使用すると通常ロックよりも性能が向上します。 更に、アプリケーションが定義した勧告的ロックが単一トランザクションに拘束されないロックの獲得機構を提供します。