【すなっぷしょっとぶんり】
スナップショット分離 とは?
💡 「過去の写真」で動くDB——誰かが書き換えていても気にせず読める
📌 このページのポイント
- トランザクション開始時のスナップショットを参照するため、他の更新が見えない
- 読み取りはロックを取得しないのでパフォーマンスが高い
- 書き込み時には最新データと比較し、競合があればエラーになる(楽観的ロック)
- PostgreSQLやSQL Serverなどで標準的にサポートされている
スナップショット分離って、どんな仕組みなの?
トランザクションが始まった瞬間のデータの「写真」を撮って、その写真を見ながら処理を進める仕組みだよ。他の人が後からデータを変えても、自分の写真には反映されない。
じゃあ、同時に別の人が書き込んでいても大丈夫なの?
読み取りはロックを取らないから、書き込み中でも普通に読めるよ。パフォーマンスがとても高いのが特徴だね。
自分が書き込もうとしたときは?
普通の分離とどう違うの?
「リピータブルリード」などの古典的な分離は読み取り時にもロックを取るから、他の書き込みをブロックしてしまう。スナップショット分離はロックなしでほぼ同じ安全性を実現できるんだよ。
じゃあ完璧なの?
「書き込みスキュー」という弱点がある。2つのトランザクションがそれぞれ別の行を変えるケースで、制約を満たさない状態になることがあるんだ。完全に防ぐにはSerializable分離が必要だよ。
まとめ:ざっくりこれだけ覚えればOK!
「スナップショット分離」って出てきたら「自分専用の瞬間コピーで安全に読む仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Snapshot Isolation」 = スナップショット分離
💬 Snapshot(瞬間の写真・複製)+Isolation(分離)。トランザクション開始時点の瞬間コピーを使う分離方式だよ