[解決済み】"read commited" と "repeatable read" の違いについて
質問
上記のアイソレーション・レベルはとてもよく似ていると思います。どなたか素敵な例を挙げて、何が違うのか説明していただけませんか?
解決方法は?
リードコミットとは、読み込まれたすべてのデータが コミット が読み込まれた時点で これは単に、中間的な、コミットされていない、「ダーティ」な読み出しを読者が見ることを制限しているに過ぎません。これは、トランザクションが読み込みを再発行したときに、そのトランザクションに含まれる 同じ データは、読み込まれた後に自由に変更することができます。
反復読み込みは、より高い分離レベルで、読み込みコミット・レベルの保証に加え、読み込まれたすべてのデータについて 変更不可 トランザクションが同じデータを再度読み込むと、前回読み込んだデータがそのまま残っていて、読み込める状態になっていることがわかります。
次の分離レベルであるシリアライザブルは、さらに強力な保証を行います:すべての繰り返し読み取りの保証に加えて、次のことも保証します。 いいえ 新しい データ は、その後の読み込みで見ることができます。
例えば、1行の列Cを持つテーブルTがあり、それが値'1'を持っているとする。そして、次のような簡単なタスクがあるとする。
BEGIN TRANSACTION;
SELECT * FROM T;
WAITFOR DELAY '00:01:00'
SELECT * FROM T;
COMMIT;
これは、テーブルTから2回の読み取りを発行し、その間に1分の遅延を設けるという単純なタスクである。
- READ COMMITTED の下で、2つ目の SELECT は、以下のような結果を返すかもしれません。 任意の のデータを使用します。同時実行トランザクションは、レコードを更新したり、削除したり、新しいレコードを挿入したりすることができます。2番目のセレクトは常に 新しい のデータです。
- REPEATABLE READ では、2 番目の SELECT は少なくとも最初の SELECT から返された行を表示することが保証されています。 変更なし . その1分間で同時実行中のトランザクションによって新しい行を追加することはできますが、既存の行を削除したり変更したりすることはできません。
- SERIALIZABLE 読み込みの場合、2 番目の select には、以下のものが表示されることが保証されています。 まさに は最初の行と同じです。同時実行中のトランザクションによって、行が変更されたり、削除されたり、新しい行が挿入されたりすることはない。
上記のロジックに従えば、SERIALIZABLEトランザクションは、あなたの生活を便利にするかもしれませんが、常に、次のようなものであることにすぐに気づくことができます。
完全ブロッキング
なぜなら、誰も行を変更、削除、挿入できないようにする必要があるからです。.Netのデフォルトのトランザクション分離レベルは
System.Transactions
スコープがシリアライズ可能であるため、通常、このようなひどいパフォーマンスになるのです。
そして最後に、SNAPSHOT アイソレーション・レベルもあります。SNAPSHOT分離レベルはserializableと同じ保証をしますが、同時実行トランザクションがデータを変更できないことを要求するのではありません。その代わり、全ての読み手は自分自身の世界のバージョン(自分自身の'スナップショット')を見ることを強制されます。このため、同時更新をブロックしないので、非常にスケーラブルであると同時に、プログラムも非常に簡単になります。しかし、この利点には代償として、余分なサーバーリソースを消費することになります。
補足の読み方
関連
-
[解決済み] ORA-01779: キーが保存されていないテーブルにマップされる列を変更できません。
-
[解決済み] SQLiteでどのようにピボットするか、つまり、長い形式で保存されたテーブルを広い形式で選択するか?
-
[解決済み] 1行目4列目(年)の一括読み込みデータ変換エラー(型の不一致または指定したコードページに対して無効な文字)
-
[解決済み] UNIONとUNION ALLの違いは何ですか?
-
[解決済み] varcharとnvarcharの違いは何ですか?
-
[解決済み] JOINとINNER JOINの違いについて
-
[解決済み] INNER JOINよりもCROSS APPLYを使用すべきなのはどのような場合ですか?
-
[解決済み] SQL Serverにおけるchar、nchar、varchar、nvarcharの違いは何ですか?
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
-
[解決済み】Non-Repeatable ReadとPhantom Readの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] varchar データ型から datetime データ型に変換すると、SQL クエリで範囲外の値が発生する
-
[解決済み】オペランド型の衝突:intはdateと互換性がない + INSERT文はFOREIGN KEY制約と衝突した
-
[解決済み】SQLが単一グループのグループ関数でないこと
-
[解決済み] ''付近の構文が正しくない
-
[解決済み] ORA-04063: ビューにエラーがあります
-
[解決済み] SQLクエリで2つの列から値を引き算する
-
[解決済み] ORA-00920: 無効な関係演算子
-
[解決済み] Presto の JSON_EXTRACT で ' ' 文字を含むキーに問題がある。
-
[解決済み] SQLです。最初の出現箇所のみを返す
-
[解決済み] 1行目4列目(年)の一括読み込みデータ変換エラー(型の不一致または指定したコードページに対して無効な文字)