排他制御とロックの試験問題への適用
DBロック問題では、各トランザクションがどの行を読み書きし、どのロックを保持・要求しているかを表にして追う。単純待ちと循環待ちを分ける。
この単元で学ぶこと
- 共有同士の互換の意味と役割を説明できる
- 共有と排他の競合の意味と役割を説明できる
- ロック取得順の意味と役割を説明できる
- ロック状態表から待ち・デッドロック・改善策を判断できる
本文解説
ロックの互換性、粒度、保持時間、取得順を確認すると、競合・デッドロック・性能低下の原因を特定しやすい。
共有同士の互換 同じ対象への共有ロック同士は共存できることが多い。 読取り並行性を保つ。
共有と排他の競合 排他更新中は共有読取りも待たされる場合がある。 分離レベル等の実装条件も関係する。
ロック取得順 複数対象を同じ順で取得すると循環待ちを減らせる。 デッドロック予防の基本。
タイムアウト/中断 長時間待ちやデッドロック時に一方を中断し再試行する。 DBMSが被害側を選ぶことがある。
短いトランザクション 必要な処理だけをまとめ、不要に長くロックを保持しない。 競合時間を減らせる。
保持ロックと要求ロックを書き、矢印が循環するかを見る。
T1:A保持/B要求、T2:B保持/A要求なら循環。A→Bの順へ統一するとこのパターンを避けやすい。
図解
重要ポイント
- 共有同士の互換: 同じ対象への共有ロック同士は共存できることが多い。
- 共有と排他の競合: 排他更新中は共有読取りも待たされる場合がある。
- ロック取得順: 複数対象を同じ順で取得すると循環待ちを減らせる。
- タイムアウト/中断: 長時間待ちやデッドロック時に一方を中断し再試行する。
- デッドロック対策は取得順と保持時間の両方を見る。
間違えやすい点
- 待ち時間が長いだけで必ずデッドロックとしない。
- 中断されたトランザクションの再試行要否を忘れない。
- ロック粒度と保持時間を同じ概念と扱わない。
用語解説
- 共有同士の互換
- 同じ対象への共有ロック同士は共存できることが多い。
- 共有と排他の競合
- 排他更新中は共有読取りも待たされる場合がある。
- ロック取得順
- 複数対象を同じ順で取得すると循環待ちを減らせる。
- タイムアウト/中断
- 長時間待ちやデッドロック時に一方を中断し再試行する。
- 短いトランザクション
- 必要な処理だけをまとめ、不要に長くロックを保持しない。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
確認問題の出題・採点や学習履歴の保存にはログインが必要です。