Upgrade to Pro — share decks privately, control downloads, hide ads and more …

トランザクションに歩み寄る ~はじめの第1歩編~

トランザクションに歩み寄る ~はじめの第1歩編~

トランザクションについて、少し深ぼっていきます。
トランザクションのACID特性やロックについて解説しています。
内容
- ACID特性
- ロック
- 2相ロック方式
- MVCC
- デッドロック
- 危険なトランザクション

Haruki Yoshida

February 08, 2024
Tweet

More Decks by Haruki Yoshida

Other Decks in Programming

Transcript

  1. トランザクションのACID 特性 A tomicity C onsistensy I solation Durability ...

    ... ... ... 原子性 一貫性 独立性 永続性 ( 全て実行 or 1 つも実行されない) ( データの整合性が取れている) ( トランザクションを外部から隠蔽) ( 成功すればデータが保存される)
  2. 共有ロック 排他ロック 共有ロック ◯ ✕ 排他ロック ✕ ✕ ロックとは(1) 共有ロック

    ・・・参照時にかけるロック 排他ロック ・・・更新時にかけるロック テーブルや行にロックをかけるよ リソースの状態 獲得するロック 獲得したいリソースの共有ロックが 開放されるまで待つことになる テーブルや行にロックをかけるよ PostgreSQL には8 種類くらいあるよ
  3. ロックとは(2) users id: 1, name: "user 1" id: 2, name:

    "user 2" id: 3, name: "user 3" id: 4, name: "user 4" Tr1 SELECT * FROM users WHERE id = 2 Tr2 UPDATE users ( 略) WHERE id = 2 SELECT * FROM users WHERE id = 4 Tr 3 SELECT * FROM users WHERE id = 4 id が2 のレコードに共有ロックをかける id が4 のレコードに共有ロックをかける id が2 のレコードの共有ロックが開放されるのを待つ 共有ロックが取得されていても、共有ロックは 取得できるので待たない
  4. id = 1 id = 2 T1 T2 トランザクション1 トランザクション2

    デッドロック(3) ① ロック獲得 ① ロック獲得 ② ロック解放待ち ① ロック獲得 ② ロック解放待ち