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

「ゲームで体感!Aurora DSQL の OCC(楽観的同時実行制御)」の結果ログから...

「ゲームで体感!Aurora DSQL の OCC(楽観的同時実行制御)」の結果ログから Aurora DSQL の動作を考察する

俺の勉強会 #3 2025/8/4

Avatar for hmatsu47

hmatsu47 PRO

August 04, 2025
Tweet

More Decks by hmatsu47

Other Decks in Technology

Transcript

  1. 「ゲームで体感!Aurora DSQL の OCC」とは? • 2025/7/5 開催 JAWS ミート 2025・LT

    ◦ https://www.docswell.com/s/hmatsu47/ZJ977V-dsql-game-jawsmt • Aurora DSQL は OCC(楽観的同時実行制御)を採用 ◦ ロックを使わない ▪ トランザクションコミット時に競合を確認(競合があればコミット不可) ◦ 一般的な RDBMS(PCC 採用)とは挙動が違う→体感してみよう! ▪ PCC:悲観的同時実行制御(ロックを使う方式) 3
  2. ゲームのルール(1/2) • ゲームが始まったら制限時間内に攻撃ボタンを押す ◦ 押すと DSQL 上のテーブル行を UPDATE → 1

    秒待つ→ COMMIT ◦ 同時に複数の人が攻撃した場合、COMMIT が成功した人が勝ち ▪ 勝つと UPDATE → COMMIT の待ち時間が 1 秒増える(最大 5 秒まで) ▪ 負けると 1 秒にリセット • 攻撃ボタンは時間内に何度押しても OK 5
  3. ゲームのルール(1/2) • ゲームが始まったら制限時間内に攻撃ボタンを押す ◦ 押すと DSQL 上のテーブル行を UPDATE → 1

    秒待つ→ COMMIT ◦ 同時に複数の人が攻撃した場合、COMMIT が成功した人が勝ち ▪ 勝つと UPDATE → COMMIT の待ち時間が 1 秒増える(最大 5 秒まで) ▪ 負けると 1 秒にリセット • 攻撃ボタンは時間内に何度押しても OK 6 増えると有利? それとも不利?
  4. ログから考察 • 最後の 30 件分が優勝の行方に関係 ◦ ただしゲームが 13:45:32.472 に終了→最後の 6

    件は時間切れ ▪ この 6 件は除外 ◦ 最後の 30 件中、攻撃が成功しているのが 3 名 ▪ 最後の 3 名を X さん・Y さん・Z さんとする 11
  5. ログを順に見ていくと(X さんのターン) No. 攻撃開始時刻 攻撃成否 参加者 待ち時間(秒) コミット時刻 1 2025/07/05

    13:45:27.831 成功 Xさん 1 2025/07/05 13:45:28.831 2 2025/07/05 13:45:27.859 失敗 Yさん 1 2025/07/05 13:45:28.859 3 2025/07/05 13:45:28.022 失敗 1 2025/07/05 13:45:29.022 4 2025/07/05 13:45:28.127 失敗 1 2025/07/05 13:45:29.127 5 2025/07/05 13:45:28.651 失敗 1 2025/07/05 13:45:29.651 6 2025/07/05 13:45:28.802 失敗 1 2025/07/05 13:45:29.802 12 Xさん(No.1)とトランザクションが並行 コミットがXさんより後→負け
  6. 次のブロックは(Y さんのターン) No. 攻撃開始時刻 攻撃成否 参加者 待ち時間(秒) コミット時刻 5 2025/07/05

    13:45:28.651 失敗 1 2025/07/05 13:45:29.651 6 2025/07/05 13:45:28.802 失敗 1 2025/07/05 13:45:29.802 7 2025/07/05 13:45:29.282 失敗 Xさん 2 2025/07/05 13:45:31.282 8 2025/07/05 13:45:29.319 成功 Yさん 1 2025/07/05 13:45:30.319 9 2025/07/05 13:45:29.337 失敗 1 2025/07/05 13:45:30.337 10 2025/07/05 13:45:29.383 失敗 1 2025/07/05 13:45:30.383 11 2025/07/05 13:45:29.416 失敗 1 2025/07/05 13:45:30.416 12 2025/07/05 13:45:29.485 失敗 1 2025/07/05 13:45:30.485 13 2025/07/05 13:45:29.514 失敗 1 2025/07/05 13:45:30.514 14 2025/07/05 13:45:29.985 失敗 1 2025/07/05 13:45:30.985 13 Yさん(No.8)と並行しているがXさん(No.1)に負けたので既に失敗
  7. 次のブロックは(Y さんのターン) No. 攻撃開始時刻 攻撃成否 参加者 待ち時間(秒) コミット時刻 5 2025/07/05

    13:45:28.651 失敗 1 2025/07/05 13:45:29.651 6 2025/07/05 13:45:28.802 失敗 1 2025/07/05 13:45:29.802 7 2025/07/05 13:45:29.282 失敗 Xさん 2 2025/07/05 13:45:31.282 8 2025/07/05 13:45:29.319 成功 Yさん 1 2025/07/05 13:45:30.319 9 2025/07/05 13:45:29.337 失敗 1 2025/07/05 13:45:30.337 10 2025/07/05 13:45:29.383 失敗 1 2025/07/05 13:45:30.383 11 2025/07/05 13:45:29.416 失敗 1 2025/07/05 13:45:30.416 12 2025/07/05 13:45:29.485 失敗 1 2025/07/05 13:45:30.485 13 2025/07/05 13:45:29.514 失敗 1 2025/07/05 13:45:30.514 14 2025/07/05 13:45:29.985 失敗 1 2025/07/05 13:45:30.985 14 No.1で勝った→待ち時間が2秒→Yさん(No.8)よりコミットが後→負け
  8. 次のブロックは(Y さんのターン) No. 攻撃開始時刻 攻撃成否 参加者 待ち時間(秒) コミット時刻 5 2025/07/05

    13:45:28.651 失敗 1 2025/07/05 13:45:29.651 6 2025/07/05 13:45:28.802 失敗 1 2025/07/05 13:45:29.802 7 2025/07/05 13:45:29.282 失敗 Xさん 2 2025/07/05 13:45:31.282 8 2025/07/05 13:45:29.319 成功 Yさん 1 2025/07/05 13:45:30.319 9 2025/07/05 13:45:29.337 失敗 1 2025/07/05 13:45:30.337 10 2025/07/05 13:45:29.383 失敗 1 2025/07/05 13:45:30.383 11 2025/07/05 13:45:29.416 失敗 1 2025/07/05 13:45:30.416 12 2025/07/05 13:45:29.485 失敗 1 2025/07/05 13:45:30.485 13 2025/07/05 13:45:29.514 失敗 1 2025/07/05 13:45:30.514 14 2025/07/05 13:45:29.985 失敗 1 2025/07/05 13:45:30.985 15 Yさん(No.8)と並行・コミットが後→負け
  9. 優勝が決まるブロックは(Z さんのターン) No. 攻撃開始時刻 攻撃成否 参加者 待ち時間(秒) コミット時刻 15 2025/07/05

    13:45:30.519 失敗 Yさん 2 2025/07/05 13:45:32.519 16 2025/07/05 13:45:30.530 成功 Zさん 1 2025/07/05 13:45:31.530 17 2025/07/05 13:45:30.601 失敗 1 2025/07/05 13:45:31.601 18 2025/07/05 13:45:30.682 失敗 1 2025/07/05 13:45:31.682 19 2025/07/05 13:45:30.735 失敗 1 2025/07/05 13:45:31.735 20 2025/07/05 13:45:30.958 失敗 1 2025/07/05 13:45:31.958 21 2025/07/05 13:45:31.120 失敗 1 2025/07/05 13:45:32.120 22 2025/07/05 13:45:31.218 失敗 1 2025/07/05 13:45:32.218 23 2025/07/05 13:45:31.274 失敗 1 2025/07/05 13:45:32.274 24 2025/07/05 13:45:31.380 失敗 1 2025/07/05 13:45:32.380 16 No.8で勝った→待ち時間が2秒→時間切れ&Zさん(No.16)より後→負け
  10. 優勝が決まるブロックは(Z さんのターン) No. 攻撃開始時刻 攻撃成否 参加者 待ち時間(秒) コミット時刻 15 2025/07/05

    13:45:30.519 失敗 Yさん 2 2025/07/05 13:45:32.519 16 2025/07/05 13:45:30.530 成功 Zさん 1 2025/07/05 13:45:31.530 17 2025/07/05 13:45:30.601 失敗 1 2025/07/05 13:45:31.601 18 2025/07/05 13:45:30.682 失敗 1 2025/07/05 13:45:31.682 19 2025/07/05 13:45:30.735 失敗 1 2025/07/05 13:45:31.735 20 2025/07/05 13:45:30.958 失敗 1 2025/07/05 13:45:31.958 21 2025/07/05 13:45:31.120 失敗 1 2025/07/05 13:45:32.120 22 2025/07/05 13:45:31.218 失敗 1 2025/07/05 13:45:32.218 23 2025/07/05 13:45:31.274 失敗 1 2025/07/05 13:45:32.274 24 2025/07/05 13:45:31.380 失敗 1 2025/07/05 13:45:32.380 17 Zさん(No.16)と並行・コミットが後→負け
  11. 結果として • 13:45:30.530 に攻撃が成功した Z さんが優勝! ◦ ゲーム終了時刻 13:45:32.472 の

    2 秒前を過ぎたあたり ▪ ゲーム終了 1 秒前の直前を狙った攻撃を阻止したことで勝利 18