Open5
【資格勉強 - AP】3-3-4. トランザクション処理
トランザクション処理のACID特性
- 原子性(Atomicity)
- コミットorロールバックのどちらかで終了する(0か1か)
- 一貫性(Consistency)
- データが矛盾せず整合性が取れている
- 「データ型」「制約」で確保
- 独立性(Isolation)
- 並列でも順番でも結果が同じ(他処理の影響を受けない)
- 「ロック」「スケジューリング」で確保
- 永続性(Durability)
- 障害が発生しても結果が失われない(耐久性)
- 「トランザクションログ」で確保
デッドロック
- デッドロック
- 共有資源を使用する2つ以上のプロセスが、互いに相手が使用している資源の解放を待機している状態
- 共有資源を使用する2つ以上のプロセスが、互いに相手が使用している資源の解放を待機している状態
- 共有ロック
- データ読込(READ)に使う
- 他トランザクションによる「更新」ができない
- 占有ロック
- データ更新(UPDATE)に使う
- 他トランザクションによる「読込」「更新」ができない
- 回答ポイント
- 各トランザクションが「共有」「占有」どちらのロックをかけようとしているか?
- ロックが解除されるタイミングは?(例:ROLLBACK)
- 共有ロックは、他トランザクションによる「読込」は可能
- 回答ポイント
- 資源のアンロックを待っていない(矢印の始点がない)ものを確認
- アンロック(矢印を削除)する
- 1〜2を繰り返しアンロック対象がなくなった時点で、「待ち」が発生しているトランザクションがデッドロックしている
- B, C, D, Fが正解⭕️
B+木(びーぷらすき / B+tree)インデックス
- 平衡木(へいこうぎ / Balanced Tree):高さのバランスを取りながら調整される木構造
- B木:特定のキーを素早く探すのに適している
- B+木:範囲検索や大量データの扱いに適している
- 回答ポイント
- 範囲検索に役立つ(NULL値や否定を含む検索には役立たない)ため、ウが正しい
障害回復処理
- ロールフォワード(前進復帰)(redo)
- 対象:チェックポイント後〜障害発生までの完了したコミット
- 方法:更新後ログで、トランザクション終了時点の状態に復元する
- ロールバック(後退復帰)(undo)
- 対象:チェックポイント後〜障害発生までの完了していないコミット
- 方法:更新前ログで、トランザクション開始時点の状態に復元する
2相コミット
- 分散データベースにで、2段階に分けてコミットをおこなう手法
- トランザクションの原子性、一貫性を維持する
- 第1相
- 調停者:
- 参加者に「コミット可能か」確認
- 参加者:
- 調停者に「コミットの可否」を応答
- セキュア(中間)状態に遷移して、調停者からの指示を待つ
- この状態で調停者側に障害が発生すると、参加者は不定状態になる
- 調停者:
- 第2相
- 調停者:
- すべての参加者が「可」だった場合
- すべての参加者に「コミット」を要求
- 参加者のうちひとりでも「否」だった場合
- すべての参加者に「ロールバック」を要求
- すべての参加者が「可」だった場合
- 調停者: