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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
vividmuimui
June 07, 2017
Programming
94
0
Share
トランザクションの分離レベル(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
12
開発組織まわりで最近考えているあれこれ
vividmuimui
0
22
bundle-update.pdf
vividmuimui
0
120
Dependabot vs BundleUpdate+LockDiff
vividmuimui
0
89
あなたの知らないRuboCopの設定
vividmuimui
0
230
最近(2019/02/03)の #Ruby , #Rails , #Bundler 事情
vividmuimui
0
160
Jasperはいいぞ!
vividmuimui
0
52
Danger CI
vividmuimui
0
110
tigとかaliasなし生活を送ってみて改めてgitを覚えてる話
vividmuimui
0
120
Other Decks in Programming
See All in Programming
【26新卒研修】OpenAPI/Swagger REST API研修
dip_tech
PRO
0
140
PHPer、Cloudflare に引っ越す
suguruooki
1
140
Lightning-Fast Method Calls with Ruby 4.1 ZJIT / RubyKaigi 2026
k0kubun
3
2.6k
mruby on C#: From VM Implementation to Game Scripting (RubyKaigi 2026)
hadashia
2
1.6k
AI時代になぜ書くのか
mutsumix
0
210
実用!Hono RPC2026
yodaka
2
300
〜バイブコーディングを超えて〜 チームで実験し続けたAI駆動開発
tigertora7571
0
190
ハーネスエンジニアリングとは?
kinopeee
13
6.8k
書籍「ユーザーストーリーマッピング」が私のバイブル
asumikam
4
480
when storing skills in S3 file
watany
3
1.4k
ソースコード→AST→オペコード、の旅を覗いてみる
o0h
PRO
1
130
How We Practice Exploratory Testing in Iterative Development( #scrumniigata ) / 反復開発の中で、探索的テストをどう実施しているか
teyamagu
PRO
3
730
Featured
See All Featured
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
160
Speed Design
sergeychernyshev
33
1.6k
Odyssey Design
rkendrick25
PRO
2
610
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
180
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
180
Navigating Team Friction
lara
192
16k
Darren the Foodie - Storyboard
khoart
PRO
3
3.3k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
290
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Statistics for Hackers
jakevdp
799
230k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
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