排他制御とロックを理解する
DBMSは複数トランザクションが同時にデータへアクセスしても整合性を保つためロックや分離制御を使う。共有ロック、排他ロック、ロック粒度、デッドロックを整理する。
この単元で学ぶこと
- 共有ロックの意味と役割を説明できる
- 排他ロックの意味と役割を説明できる
- ロック粒度の意味と役割を説明できる
- 共有/排他ロックと粒度・デッドロックを区別できる
本文解説
共有ロックは読取り同士の共存を許しやすく、排他ロックは更新対象への他アクセスを制限する。ロック範囲が広いと管理は単純だが並行性が下がる。
共有ロック 主に読取りで使い、他の共有ロックと共存できるロック。 更新ロックとは競合する。
排他ロック 更新対象を他トランザクションから保護するロック。 他の共有・排他ロックを制限する。
ロック粒度 表・ページ・行などロック対象範囲の大きさ。 細かいほど並行性は高まりやすいが管理負荷も増える。
ロック待ち 必要なロックが他トランザクションに保持され、取得まで待つ状態。 待つだけならデッドロックとは限らない。
DBデッドロック 複数トランザクションが互いのロック解放を循環待ちする状態。 DBMSが一方を中断して解消することがある。
読取りか更新か、ロック対象範囲、待ち関係が循環しているかを確認する。
二つの読取りは共有ロックで共存できても、同じ行の更新には排他ロックが必要になり待ちが発生する。
図解
重要ポイント
- 共有ロック: 主に読取りで使い、他の共有ロックと共存できるロック。
- 排他ロック: 更新対象を他トランザクションから保護するロック。
- ロック粒度: 表・ページ・行などロック対象範囲の大きさ。
- ロック待ち: 必要なロックが他トランザクションに保持され、取得まで待つ状態。
- 単なるロック待ちとデッドロックを区別する。
間違えやすい点
- 共有ロックなら更新も自由と考えない。
- 行ロックならデッドロックが絶対起きないと考えない。
- ロック範囲を広げれば性能が必ず上がると考えない。
用語解説
- 共有ロック
- 主に読取りで使い、他の共有ロックと共存できるロック。
- 排他ロック
- 更新対象を他トランザクションから保護するロック。
- ロック粒度
- 表・ページ・行などロック対象範囲の大きさ。
- ロック待ち
- 必要なロックが他トランザクションに保持され、取得まで待つ状態。
- DBデッドロック
- 複数トランザクションが互いのロック解放を循環待ちする状態。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
確認問題の出題・採点や学習履歴の保存にはログインが必要です。