Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
「ゲームで体感!Aurora DSQL の OCC(楽観的同時実行制御)」の結果ログから...
Search
hmatsu47
PRO
August 04, 2025
Technology
41
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
「ゲームで体感!Aurora DSQL の OCC(楽観的同時実行制御)」の結果ログから Aurora DSQL の動作を考察する
俺の勉強会 #3 2025/8/4
hmatsu47
PRO
August 04, 2025
More Decks by hmatsu47
See All by hmatsu47
JAWS ミート 2026 の「出し物」のゲームを Kiro と AI-DLC v2 で作った話
hmatsu47
PRO
0
3
ゲームで挑戦!VPC の気持ちになって IPv4/v6 パケットをルーティングしよう!
hmatsu47
PRO
0
25
続・名古屋城とデータセンター
hmatsu47
PRO
0
24
【再演】IPv6 VPC の実装パターンをいくつか
hmatsu47
PRO
0
29
名古屋城とデータセンター
hmatsu47
PRO
0
38
IPv6 に関する話
hmatsu47
PRO
0
28
さいきんの光ファイバーの話
hmatsu47
PRO
0
68
低いほうのレイヤを見てみる話
hmatsu47
PRO
0
31
IPv6 VPC の実装パターンをいくつか
hmatsu47
PRO
0
53
Other Decks in Technology
See All in Technology
トークンマネジメントでAIにとって働きやすい環境を実現する
hikaruegashira
0
140
2026-08-15 JAWS-UG 茨城 #16 Secrets ManagerにおけるSecret値の管理(Terraformの場合) / Secrets Manager Secrets
masasuzu
0
530
猫付きpingコマンドを自作
uyuki234
0
290
AIコーディングの次。コードレビューと理解負荷を解消して組織の開発生産性を高める
moongift
PRO
2
2.7k
フィジカルAIの知識ゼロの僕でも AIを使えばここまでできた
tatsuya1970
0
140
AI開発に用いられるHPC技術について
gpuunite_official
0
250
平文パスワードはログに“残り” ── 肝心の侵入は“痕跡すら残らない”
kuroneko13
0
120
長期運営で肥大化したExcelマスターデータの解消に向けた移行事例
gree_tech
PRO
0
120
What's new in Go 1.27?
ciarana
0
300
私がブラウザを自作したくなった理由
supurazako
1
280
Android skills に学ぶ
kokiko
0
150
DatadogのBits Chatが開発組織にもたらしたもの / What Bits Chat Has Brought Us
sms_tech
1
300
Featured
See All Featured
Fireside Chat
paigeccino
42
4k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
280
The Invisible Side of Design
smashingmag
301
52k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Thoughts on Productivity
jonyablonski
76
5.3k
Product Roadmaps are Hard
iamctodd
55
12k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.8k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
210
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
710
Transcript
「ゲームで体感!Aurora DSQL の OCC (楽観的同時実行制御)」の結果ログから Aurora DSQL の動作を考察する 俺の勉強会 #3
2025/8/4 まつひさ(hmatsu47)
自己紹介…はスキップ 松久裕保(@hmatsu47) • https://qiita.com/hmatsu47 2
「ゲームで体感!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
この問題の正解を確かめるためのゲーム 4
ゲームのルール(1/2) • ゲームが始まったら制限時間内に攻撃ボタンを押す ◦ 押すと DSQL 上のテーブル行を UPDATE → 1
秒待つ→ COMMIT ◦ 同時に複数の人が攻撃した場合、COMMIT が成功した人が勝ち ▪ 勝つと UPDATE → COMMIT の待ち時間が 1 秒増える(最大 5 秒まで) ▪ 負けると 1 秒にリセット • 攻撃ボタンは時間内に何度押しても OK 5
ゲームのルール(1/2) • ゲームが始まったら制限時間内に攻撃ボタンを押す ◦ 押すと DSQL 上のテーブル行を UPDATE → 1
秒待つ→ COMMIT ◦ 同時に複数の人が攻撃した場合、COMMIT が成功した人が勝ち ▪ 勝つと UPDATE → COMMIT の待ち時間が 1 秒増える(最大 5 秒まで) ▪ 負けると 1 秒にリセット • 攻撃ボタンは時間内に何度押しても OK 6 増えると有利? それとも不利?
ゲームのルール(2/2) • 制限時間内で一番最後に COMMIT した人が優勝! ◦ ボタンを押した後の COMMIT が制限時間外なら攻撃失敗 7
ゲームのルール(2/2) • 制限時間内で一番最後に COMMIT した人が優勝! ◦ ボタンを押した後の COMMIT が制限時間外なら攻撃失敗 8
待ち時間も考慮して ボタンを押す必要あり
当日の様子 9
さっきの問題の正解 10
ログから考察 • 最後の 30 件分が優勝の行方に関係 ◦ ただしゲームが 13:45:32.472 に終了→最後の 6
件は時間切れ ▪ この 6 件は除外 ◦ 最後の 30 件中、攻撃が成功しているのが 3 名 ▪ 最後の 3 名を X さん・Y さん・Z さんとする 11
ログを順に見ていくと(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さんより後→負け
次のブロックは(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)に負けたので既に失敗
次のブロックは(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)よりコミットが後→負け
次のブロックは(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)と並行・コミットが後→負け
優勝が決まるブロックは(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)より後→負け
優勝が決まるブロックは(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)と並行・コミットが後→負け
結果として • 13:45:30.530 に攻撃が成功した Z さんが優勝! ◦ ゲーム終了時刻 13:45:32.472 の
2 秒前を過ぎたあたり ▪ ゲーム終了 1 秒前の直前を狙った攻撃を阻止したことで勝利 18
なお PCC(ロックを使う方式)では結果が変わる • 詳しくは Qiita の記事にて ◦ https://qiita.com/hmatsu47/items/75eee0b21e3be5b80061 19