MySQLのロック/トランザクション機構メモ
実践ハイパフォーマンスMySQL
を読んで、基礎を学習中。備忘のためにメモ。
ロックとエンジン
MySQLにはストレージエンジンがいくつかあるが、それぞれ使うロック方式が決まっている。
下にいくほど並行処理に強いが、その分だけ処理のオーバーヘッドが発生する。
ケースによって使い分けることが大事。
ACID
トランザクションはACID性を満たさなければならない。
独立性レベル
いくつかレベル分けされており、どの問題(Dirty Read, Non-Repeatable Read, Phantom Read)まで防ぎたいかによって選択すべき独立性レベルが変わる。
- 非コミット読み出し(Read uncommitted)
- Dirty, Non-Repeatable, Phantomいずれも防げない
- コミット済み読み出し(Read committed)
- Dirtyは防げる
- Non-Repeatable, Phantomは防げない
- 反復可能読み出し(Repeatable read)
- Dirty, Non-Repeatableは防げる
- Phantomは防げない
ちなみに、InnoDBのデフォルトはREPEATABLE READ。