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
42
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
中小企業に就職して転職せず30年。結果どうなった?
hmatsu47
PRO
0
40
JAWS ミート 2026 の「出し物」のゲームを Kiro と AI-DLC v2 で作った話
hmatsu47
PRO
0
11
ゲームで挑戦!VPC の気持ちになって IPv4/v6 パケットをルーティングしよう!
hmatsu47
PRO
0
26
続・名古屋城とデータセンター
hmatsu47
PRO
0
25
【再演】IPv6 VPC の実装パターンをいくつか
hmatsu47
PRO
0
31
名古屋城とデータセンター
hmatsu47
PRO
0
38
IPv6 に関する話
hmatsu47
PRO
0
29
さいきんの光ファイバーの話
hmatsu47
PRO
0
70
低いほうのレイヤを見てみる話
hmatsu47
PRO
0
32
Other Decks in Technology
See All in Technology
Bet AI Day 2026丨Production-Ready AI Agents — エンタープライズの実務を任せるための設計と運用
layerx
PRO
2
1.8k
IDperturb: Enhancing Variation in Synthetic Face Generation via Angular Perturbation
sansantech
PRO
0
110
bet_ai_day_2026_session02
agenticsec
1
750
V8コントリビュート超入門
riyaamemiya
0
120
いかに伝えるか 〜新卒エンジニアの教育のための、ライトノベル活用の一例
ikedon
1
170
Genie Code ワークショップ 基礎編 / Genie-Code-Workshop-fundamental
databricksjapan
PRO
0
310
[RSJ26] Flow as Flow: Modeling Robot Velocity Fields as Probability Velocity Fields
keio_smilab
PRO
0
180
AIで実装は速くなった。なのにプロダクトは速くならない。職能の壁を越えて価値のフローを設計する
nwiizo
5
5.6k
Azure App Service / Container Apps の組み込み認証
kuniteru
0
160
分割40%キーボードにスムーズに入門するには
hoto17296
1
220
データエンジニアリングワークショップ:Auto LoaderとSparkで学ぶデータパイプライン構築
databricksjapan
PRO
0
110
Hub & Spoke 環境のネットワークルーティングを分解してみる
tsuyataku
1
510
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
698
190k
BBQ
matthewcrist
89
10k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Site-Speed That Sticks
csswizardry
13
1.5k
WCS-LA-2024
lcolladotor
0
820
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
570
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Facilitating Awesome Meetings
lara
57
7.1k
It's Worth the Effort
3n
188
29k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Mobile First: as difficult as doing things right
swwweet
225
10k
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