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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
hmatsu47
PRO
August 04, 2025
Technology
35
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
ゲームで挑戦!VPC の気持ちになって IPv4/v6 パケットをルーティングしよう!
hmatsu47
PRO
0
20
続・名古屋城とデータセンター
hmatsu47
PRO
0
20
【再演】IPv6 VPC の実装パターンをいくつか
hmatsu47
PRO
0
21
名古屋城とデータセンター
hmatsu47
PRO
0
32
IPv6 に関する話
hmatsu47
PRO
0
23
さいきんの光ファイバーの話
hmatsu47
PRO
0
50
低いほうのレイヤを見てみる話
hmatsu47
PRO
0
26
IPv6 VPC の実装パターンをいくつか
hmatsu47
PRO
0
44
光ファイバーと IPv6 絡みの話
hmatsu47
PRO
0
60
Other Decks in Technology
See All in Technology
“それは自分の仕事じゃない"を越えて行け
yuukiyo
1
520
穢れた技術選定について
watany
19
6.2k
キャリアLT会#3
beli68
2
250
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
1
290
複数プロダクトで進めるAI機能実装 ── 実践から得たリアルな学びとロードマップ実現への挑戦 / AICon2026_yanari
rakus_dev
1
280
AI、CDK と協働する Full TypeScript アプリケーション開発 / Full TypeScript Application with AI and CDK
geekplus_tech
2
490
PHPで作って学ぶリアルタイム音声対話AIとWebSocket入門 by ムナカタ
munakata
0
140
VPCセキュリティ対応の最新事情
nagisa53
1
300
2年前に削除したPHPクラスが、 ある日突然決済をエラーにした
ykagano
1
800
AI x 開発生産性を取り巻く予算戦略と投資対効果
i35_267
7
3k
生成 AI 時代にいま一度「問い合わせ」について考えてみる
kazzpapa3
1
130
発表と総括 / Presentations and Summary
ks91
PRO
0
190
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.5k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
It's Worth the Effort
3n
188
29k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Technical Leadership for Architectural Decision Making
baasie
3
440
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Done Done
chrislema
186
16k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
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