1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【DBスペシャリスト試験対策 Day3】トランザクション制御・ロック実装・整合性制御まとめ

Posted at

【DBスペシャリスト試験対策 Day3】トランザクション制御・ロック実装・整合性制御まとめ


✅ 本記事の目的

DBスペシャリスト試験に向けて、トランザクション管理の中でも**「ロック制御と整合性」**に関する要点を、InnoDBとPostgreSQLの実装比較も含めて整理します。


📌 1. ロックの基本:共有ロックと排他ロック

ロック種別 読み取り 書き込み 他Txと共存
共有ロック(S) 他のSロックと共存可
排他ロック(X) 単独でしか取得不可
-- 共有ロック
SELECT * FROM users WHERE id = 1 LOCK IN SHARE MODE;

-- 排他ロック
SELECT * FROM users WHERE id = 1 FOR UPDATE;

🔄 2. Two Phase Locking(2PL:2相ロック方式)

◼ 構成

  1. 拡張フェーズ:ロックを取得できるが、解放できない
  2. 縮小フェーズ:ロックの取得は禁止、解放のみ可能

→ 一度ロックを解放したら、新しいロックは取れない

◼ 派生型

種類 特徴
Strict 2PL コミットまでロック保持(InnoDBの基本)
Rigorous 2PL S/Xロック両方をコミットまで保持

⚠️ 3. デッドロックの4条件と回避戦略

条件名 内容
相互排他 リソースを同時に1Txが専有
保持と待機 ロック保持中に別のロックを待つ
非奪取 ロックを他Txが奪えない
循環待機 Tx同士が互いにロックを待つループ状態

⚔️ 4. 衝突制御戦略:Wait-Die vs Wound-Wait

条件 Wait-Die Wound-Wait
年上Tx → 年下Tx 待機OK 強制Abort(Wound)
年下Tx → 年上Tx 即Abort(Die) 待機

→ いずれも2PLをベースにしたデッドロック予防方式


🧱 5. InnoDBのロック実装:Gap LockとNext-Key Lock

ロック 対象 ファントム対策 INSERT防止
Record Lock 特定の行
Gap Lock 行の間の隙間
Next-Key Lock 行+隙間 ✅(標準)

SELECT ... FOR UPDATENext-Key Lock が自動適用される


🐘 6. PostgreSQLの実装:SSI方式(Serializable Snapshot Isolation)

  • 読み取りは常にスナップショット参照(MVCC)
  • Serializable はロック不要で直列化可能性を保証
  • 実行後に矛盾を検出 → Abort処理で整合性担保

✅ 7. 分離レベルと整合性問題まとめ

分離レベル Dirty Read Non-Repeatable Read Phantom Read
Read Uncommitted
Read Committed
Repeatable Read
Serializable

📘 午後Ⅱ風対策ポイント

  • 整合性破壊の原因=排他制御ミス or 分離レベル設定ミス
  • InnoDBかPostgreSQLかで実装アプローチが異なる
  • SSI or Next-Key Lock でファントム対策を確実に押さえる

🧠 おまけ:覚えておきたい語呂&要点

  • Wait-Die:「年下は死ぬ、年上は待つ」
  • Wound-Wait:「年上は殺る、年下は待つ」
  • Gap Lock:「空間ロックでINSERT防止」
  • 2PL:「ロック取得→解放フェーズの2段階」

✍️ まとめ

本記事では、DBスペ試験において問われやすいトランザクション制御、ロック方式、整合性維持の要点を、MySQL(InnoDB)とPostgreSQLの実装比較を交えて整理しました。

次回は「トラブル分析型・午後Ⅱ演習問題」に取り組む予定です!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?