Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ アイソレーション:リピータブルリードおよびシリアライザブルレベル | ACID
SQL最適化とクエリ機能

bookアイソレーション:リピータブルリードおよびシリアライザブルレベル

メニューを表示するにはスワイプしてください

リピータブルリード(Repeatable Read)

データベースにおけるリピータブルリード分離レベルは、トランザクションを開始した時点のデータベースのスナップショットがタスク全体を通じて変わらないことを保証します。 つまり、作業中に他の変更がデータベースで発生しても、開始時点のデータのみが表示されます。 リピータブルリード分離下のトランザクションは、参照するすべての行に読み取りロックを、挿入・更新・削除する行には書き込みロックを保持します。これにより、ロストアップデート、ダーティリード、ノンリピータブルリードが防止されます。 ただし、この分離レベルでも発生する問題が1つあります。それがファントムリードです。

ファントムリード

ファントムリードは、あるトランザクションがデータを読み取っている間に、別のトランザクションが新しいレコードをデータベースに追加することで発生します。その結果、2回連続で同じクエリを実行しても、異なる結果セットが返される場合があります。

ノンリピータブルリードとファントムリードの違い

ノンリピータブルリードは、ユーザーAが同じクエリを実行した際、ユーザーBによる変更のために同じ行に対して異なる値が連続した読み取りで返される現象です。

一方、ファントムリードは、ユーザーAが同じクエリを実行した際、個々の行自体は更新されていなくても、連続した読み取りで異なる行セットが返される現象です。

この分離レベルは、次のコマンドを使用してSQLクエリで指定可能:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

シリアライザブル

シリアライザブル分離レベルは、データベースにおける最も高い分離レベルであり、最も厳格な同時実行制御を保証。
このレベルでは、トランザクションは逐次的に処理されたかのように実行される(実際には同時に実行されていても)。これにより、トランザクションの結果は何らかの直列順序で実行された場合と同じになり、一貫性が保たれ、すべての既知の同時実行異常を防止

注意

この分離レベルを使用すると、ロックの増加によりパフォーマンスが低下する可能性あり。

この分離レベルは、次のステートメントでSQLクエリに設定可能:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

question-icon

分離レベルとその説明を対応させてください。

Read Uncommitted:
Read Committed:

Repeatable Read:

Serializable:

クリックまたはドラッグ`n`ドロップして空欄を埋めてください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  7

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  7
some-alt