本文へスキップ

スナップショット分離とは?

すなっぷしょっとぶんり

ナップショット分離とは、トランザクションが開始した時点のデータの「スナップショット(写し)」を見て処理を行う分離レベルで、読み取りがロックをほとんど必要とせず高い同時実行性を実現します。

ナップショット分離(Snapshot Isolation、SI)とは、データベーストランザクション分離レベルの一種で、各トランザクションが開始した瞬間データ整合したコピー(スナップショット)を参照しながら処理を行う仕組みです。

従来のロックベースの分離では、読み取りと書き込みが互いにブロックし合い、同時実行性が低下することがあります。スナップショット分離はMVCC(多版型同時実行制御)と呼ばれる技術を用いて各バージョンのデータを保持しておき、トランザクションが開始した時点での最新バージョンだけを見ることで、読み取りトランザクションが書き込みをブロックしない設計を実現します。

スナップショット分離の特徴は以下のとおりです。

  • ノンブロッキング読み取り:他のトランザクションの書き込みに関係なく、スナップショット時点のデータを常に読める。
  • 繰り返し読み取りの保証:同じトランザクション内で同じデータを何度読んでも同じ値が返る。
  • ライト・スキューの発生可能性:直列化可能な分離(Serializable)とは異なり、複数トランザクションが互いの更新を見ずに書き込む「ライト・スキュー」という異常が生じることがある。

PostgreSQLのデフォルト分離レベルである「Read Committed」とは区別が必要で、PostgreSQLでは「Repeatable Read」以上がスナップショット分離に相当します。OracleやSQL Serverでもスナップショット分離をサポートしており、高トラフィックなOLTPシステムで広く採用されています。

使い方・例文

ECサイトで複数ユーザーが同時に在庫確認と注文処理を行う際、スナップショット分離によりそれぞれのトランザクションが開始時点の在庫数を参照できるため、読み取りのブロックが発生しにくくなります。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語