IT用語集 › データベース › ライトスキュー

ライトスキュー

データベース Svenska → 更新: 2026-10-22

並行性の異常の一つ。2つのトランザクションが重なるデータを読み、それぞれ読んだ内容に基づいて更新した結果、個々は分離されているのに最終状態が不正になる。スナップショット分離では起こり得るが、SERIALIZABLEなら防げる。

典型例は病院の「当直医は常に1人以上」というルールだ。トランザクション1で医師Aが休暇を取れるか確認する。count(on_call) = 2 なので可。トランザクション2でも医師Bが同じ確認をし、やはり2なので可。両者が on_call = false に更新すると、当直医は0人になる。どちらも2人いる状態を見て判断し、分離され、正常にコミットされたのに、合わせた結果は不正だ。対策はSERIALIZABLE分離レベル(SSI)、明示的な行ロック(FOR UPDATE)、アプリケーション側の制約検証など。PostgreSQLのSERIALIZABLEはライトスキューを検出してトランザクションを中止する。

← 用語集に戻る