【すなっぷしょっとぶんり】

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

💡 「過去の写真」で動くDB——誰かが書き換えていても気にせず読める
📌 このページのポイント
スナップショット分離のしくみ 時間軸 トランザクション A スナップショット取得 READ トランザクション B WRITE Aには見えない 競合チェック (楽観的ロック) 読み取りTx 書き込みTx ✕ 後の更新はスナップショットに反映されない
スナップショット分離:開始時点のコピーを読むため書き込みと干渉しない
ひよこ ひよこ

スナップショット分離って、どんな仕組みなの?

ペンギン先生 ペンギン先生

トランザクションが始まった瞬間のデータの「写真」を撮って、その写真を見ながら処理を進める仕組みだよ。他の人が後からデータを変えても、自分の写真には反映されない。

ひよこ ひよこ

じゃあ、同時に別の人が書き込んでいても大丈夫なの?

ペンギン先生 ペンギン先生

読み取りはロックを取らないから、書き込み中でも普通に読めるよ。パフォーマンスがとても高いのが特徴だね。

ひよこ ひよこ

自分が書き込もうとしたときは?

ペンギン先生 ペンギン先生

そのときは「自分のスナップショット以降に他の人が同じ行を変えていないか」をチェックするんだ。競合があればエラーになる。これを「楽観的ロック」と呼ぶよ。

ひよこ ひよこ

普通の分離とどう違うの?

ペンギン先生 ペンギン先生

「リピータブルリード」などの古典的な分離は読み取り時にもロックを取るから、他の書き込みをブロックしてしまう。スナップショット分離はロックなしでほぼ同じ安全性を実現できるんだよ。

ひよこ ひよこ

じゃあ完璧なの?

ペンギン先生 ペンギン先生

「書き込みスキュー」という弱点がある。2つのトランザクションがそれぞれ別の行を変えるケースで、制約を満たさない状態になることがあるんだ。完全に防ぐにはSerializable分離が必要だよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
スナップショット分離」って出てきたら「自分専用の瞬間コピーで安全に読む仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Snapshot Isolation」 = スナップショット分離
💬 Snapshot(瞬間の写真・複製)+Isolation(分離)。トランザクション開始時点の瞬間コピーを使う分離方式だよ
← 用語集にもどる