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
トランザクションの分離レベル(Isolation Level)について
Search
vividmuimui
June 07, 2017
Programming
96
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
トランザクションの分離レベル(Isolation Level)について
original
https://vividmuimui.github.io/slides/isolation-level/slides/
vividmuimui
June 07, 2017
More Decks by vividmuimui
See All by vividmuimui
あるチームでの技術選定で考えてること(外部向けに修正版)
vividmuimui
0
14
開発組織まわりで最近考えているあれこれ
vividmuimui
0
26
bundle-update.pdf
vividmuimui
0
130
Dependabot vs BundleUpdate+LockDiff
vividmuimui
0
92
あなたの知らないRuboCopの設定
vividmuimui
0
250
最近(2019/02/03)の #Ruby , #Rails , #Bundler 事情
vividmuimui
0
170
Jasperはいいぞ!
vividmuimui
0
54
Danger CI
vividmuimui
0
110
tigとかaliasなし生活を送ってみて改めてgitを覚えてる話
vividmuimui
0
130
Other Decks in Programming
See All in Programming
AIで効率化できた業務・日常
ochtum
0
150
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
790
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.8k
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
0
160
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
410
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
130
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
120
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
210
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
640
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
1
480
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
310
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
360
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
450
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
260
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
260
Thoughts on Productivity
jonyablonski
76
5.2k
Scaling GitHub
holman
464
140k
Become a Pro
speakerdeck
PRO
31
6k
Facilitating Awesome Meetings
lara
57
7k
Agile that works and the tools we love
rasmusluckow
331
22k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Embracing the Ebb and Flow
colly
88
5.1k
Transcript
トランザクションの分離レ トランザクションの分離レ ベル(Isolation Level) につ ベル(Isolation Level) につ いて いて
1
はじめに はじめに 極力、自信がないところは書かないように気を付けましたが、 間違っているところが有るかもしれないので、 このスライドの内容を鵜呑みせずに、 くわしくはググるか↓の記事を見てください。 このスライドはおもに↓の記事を参照しながら書きました。 http://qiita.com/kumagi/items/1dc1a91ec007365ac694 http://gyouza-daisuki.hatenablog.com/entry/2013/11/19/150838 https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A9%E3%83%B3%E3%82
2
分離レベルとは 分離レベルとは トランザクションが複数同時に行われた時に、 一つのトランザクションがほかの処理からどれだけ独立しているか、 ほかの処理に影響をどれだけ影響をあたえるのか、 を設定するもの。 3
分離レベルとは(2) 分離レベルとは(2) ANSI の定義だと、4 つの種類がある。 READ UNCOMMITTED READ COMMITTED REPEATABLE
READ SERIALIZABLE READ UNCOMMITTED が一番独立性が低い、下に行くほど高い ( という話もある) Web 開発者が知っておくべき八つの分離レベル 4
READ UNCOMMITTED READ COMMITTED PostgreSQL, Oracle, SQL Server REPEATABLE READ
Mysql, MariaDB SERIALIZABLE は性能は良いが独立性が低い、 は独立性は高いが性能が低い より http://qiita.com/kumagi/items/1dc1a91ec007365ac694 5
READ COMMITTED READ COMMITTED コミット済みのものはread する。 ファジーリード/Non-Repeatable Read Anomaly/Inconsistent Read
Anomaly x を2 回read しようとした時に、間に他トランザクションでx のwrite があった時に、read した内容が異なる Read Skew Anomaly x, y をread しようとした時に、他トランザクションでy のwrite があ った時に、read したx, y に一貫性がない Lost Update Anomaly 6
REPEATABLE READ REPEATABLE READ 一度読み込んだデータはそのトランザクション内では何度読んでも同じ値に なる。 ほかのトランザクションでwrite のコミットがされても、write 前のデータを read
していれば、write 後にread しても同じデータが読まれる。 ファントムリード 2 回範囲に対する操作をした時に、間にinsert が発生していると、結 果が異なる 2 回count しようとした時に、間で1 件insert されてた場合、2 回目は 1 件多い数字になる READ COMMITTED で発生してたAnomaly は発生しない 7
REPEATABLE READ(2) REPEATABLE READ(2) 同じtransaction 内で2 回read しようとしても結果は同じ。 => しかし、この仕組みのことを知らずに、
最新のデータを取るぞ!って思って2 回目のread をしても1 回目のread と同 じデータなので、 事故る可能性がある。 8
REPEATABLE READ(2) REPEATABLE READ(2) Mysql のInnnoDB では、ネクストキーロックという仕組みでファントムリー ドが起きないようにしている。 が、そのせいでギャップロックが発生する https://dev.mysql.com/doc/refman/5.6/ja/innodb-next-key-locking.html
9
言いたかったこと 言いたかったこと Rails を使っているとActiveRecord のお陰で、DB サーバーがMysql なのか PostgreSQL なのかを気にせず使えてとても便利。 だが、こういう違いが有ることを意識しておかないと事故る可能性がある。
10
最後に 最後に 極力、自信がないところは書かないように気を付けましたが、 間違っているところが有るかもしれないので、 このスライドの内容を鵜呑みせずに、 くわしくはググるか↓の記事を見てください。 このスライドはおもに↓の記事を参照しながら書きました。 http://qiita.com/kumagi/items/1dc1a91ec007365ac694 http://gyouza-daisuki.hatenablog.com/entry/2013/11/19/150838 https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A9%E3%83%B3%E3%82
11