Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
「ゲームで体感!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
43
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
95
JAWS ミート 2026 の「出し物」のゲームを Kiro と AI-DLC v2 で作った話
hmatsu47
PRO
0
30
ゲームで挑戦!VPC の気持ちになって IPv4/v6 パケットをルーティングしよう!
hmatsu47
PRO
0
33
続・名古屋城とデータセンター
hmatsu47
PRO
0
30
【再演】IPv6 VPC の実装パターンをいくつか
hmatsu47
PRO
0
35
名古屋城とデータセンター
hmatsu47
PRO
0
45
IPv6 に関する話
hmatsu47
PRO
0
33
さいきんの光ファイバーの話
hmatsu47
PRO
0
80
低いほうのレイヤを見てみる話
hmatsu47
PRO
0
38
Other Decks in Technology
See All in Technology
React改造してみた
tsukina_7mochi
0
120
Kiro Crewで「みのるん式」仕事術やってみた
minorun365
PRO
3
650
PHPカンファレンス関西の招待状 / Invitation to PHP Conference Kansai
ykanoh
0
210
Metadata - Section 1: HTML Basics
mohab1
0
120
OptunaHub: ブラックボックス最適化のためのプラットフォーム
pfn
PRO
0
140
専門領域のAIをどう評価するか
bengo4com
2
290
S3 Filesで挑む! 八戸せんべい汁の食べ頃問題
usanchuu
0
120
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
470
初海外で注意すべきこと12選!!!安全快適なre:invent生活にするために
yuuuuuuu168
1
180
会社紹介資料 / Sansan Company Profile
sansan33
PRO
31
430k
hackers_champloo_2026_tidb
makocchi
0
170
サブエージェントと Claude Mods で作る独自 Advisor ツールの話
kenichiodo
2
170
Featured
See All Featured
We Are The Robots
honzajavorek
0
400
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
540
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
730
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
570
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Statistics for Hackers
jakevdp
799
230k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
550
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
400
Paper Plane
katiecoart
PRO
5
54k
New Earth Scene 8
popppiees
4
2.7k
Documentation Writing (for coders)
carmenintech
77
5.6k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
850
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