【りーどこみってど】

Read Committed とは?

公開:
💡 確定したものだけ見せてね!下書きはお断り
📌 このページのポイント
トランザクション分離レベルの比較 分離レベル ダーティリード ノンリピータブル ファントム Read Uncommitted ✗ 発生 ✗ 発生 ✗ 発生 Read Committed ✓ 防止 ✗ 発生 ✗ 発生 Repeatable Read ✓ 防止 ✓ 防止 ✗ 発生 Serializable ✓ 防止 ✓ 防止 ✓ 防止 ◆ PostgreSQL / Oracle デフォルト: Read Committed ◆ MySQL(InnoDB) デフォルト: Repeatable Read ↑ 安全性が低い           ↓ 安全性が高い(パフォーマンスは低下)
トランザクション分離レベルの比較
ひよこ ひよこ
Read Committedって、何を読めるの?
ペンギン先生 ペンギン先生
「コミット済み(確定済み)」のデータだけを読み取れる、というトランザクション分離レベルだよ。他のトランザクションがまだ処理中の未確定データは見えないようにするんだ
ひよこ ひよこ
それってつまりダーティリードが防げるってことだよね?
ペンギン先生 ペンギン先生
そう!ダーティリードは防げるよ。でも、他のトランザクションがコミットした変更は見えちゃうから、同じクエリを2回実行すると値が変わるノンリピータブルリードは起きうるんだ
ひよこ ひよこ
どのデータベースで使われてるの?
ペンギン先生 ペンギン先生
PostgreSQLOracle Databaseのデフォルト分離レベルがRead Committedだよ。一方、MySQLのInnoDBはRepeatable Readがデフォルトなんだ
ひよこ ひよこ
じゃあPostgreSQLの方が安全性が低いの?
ペンギン先生 ペンギン先生
一概にそうとは言えないよ。Read Committedはロックが少ないからパフォーマンスが良く、多くの業務アプリでは十分な安全性なんだ。必要に応じて分離レベルを上げればいいだけだしね
ひよこ ひよこ
分離レベルって全部でいくつあるの?
ペンギン先生 ペンギン先生
SQL標準では4つ定義されているよ。Read Uncommitted、Read Committed、Repeatable Read、Serializableの順に安全性が上がるけど、その分パフォーマンスは下がる。実務では「デフォルトのまま使って、問題が出たら上げる」というアプローチが多いんだよ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Read Committed」って出てきたら「確定済みデータだけ読む安全設定」と思えればだいたいOK!
📖 おまけ:英語の意味
「Read Committed」 = コミット済み読み取り
💬 committed(確定済み)のデータだけをread(読む)できるという意味だよ
← 用語集にもどる