データベース - データベースの分離レベル

概要

同時データベースの場合に発生する可能性があります。

  • ダーティー読み取り
  • 非反復可能読み取り - >原因:UPDATE操作
  • マジック読書 - >の理由:INSERT / DELETE操作

これらの問題を回避するために、データの正確性を確保するために、データベーストランザクションの分離レベルを上げます。ローからハイへの分離レベルは、4つのレベルがあります。

  • READ UNCOMMITTED READ UNCOMMITTED
  • 読み取りコミット(非反復可能読み取り)読み取りコミット
  • 反復可能読み取り反復可能読み取り
  • シリアライズシリアライズ

 

それは言及する価値がある:ほとんどのデータベースのデフォルトのトランザクション分離レベル読み取りがコミットされ、そのようなSQL Serverの、Oracleなど。MySQLのデフォルトの分離レベルが反復可能読み取りです。

 

まず、並行性の問題

       1、ダーティ・リード

            T1は、ピースT2データレコードを取得するトランザクション次いで、データ・トランザクションを操作して、T1異常、トランザクションのロールバック場合、T2は、データを読み出すダーティデータ、ダーティ・リードと呼ばれる現象です。

       2、非反復可能読み取り

             再びT1のレコードを読み取るときに、トランザクションT1を繰り返し読み出し間隔で、当取引データT2を更新し、レコードを読み取ること、一貫性のないデータは、非反復リードとして知られる現象を取得しました。その理由は、主にデータを更新しています

       3、ファントム読み取り

             複数のレコードを処理するトランザクションT1バッチは、トランザクションT2は、1つまたは複数のレコードを追加または削除、T1処理は、クエリ処理の結果を完了したとき、あなたは何のレコード契約(T2新)以下見つかったレコードが(存在しないでしょうT2削除)は、錯覚感、ファントム読み取りとして知られる現象が発生します。主なデータは、追加またはリードを削除しています。

第二に、分離レベル

       1、非コミット読み取り(非コミット読み取り)

             ①定義:他のトランザクションのコミットされていないデータを読み取るためのトランザクションであり、それは、分離機構の最低レベルです。

             ②短所:、反復不能読み取り、ダーティー読み取り、ファントムリードを持っています。

             ③ ダーティリードの場合:プログラマーの給料を与えるために上司を、プログラマの給与は36,000 /月です。しかし、所有者に支払われる給与が誤っ39 000 /月に間違った番号、プレスを押し、データが保存されているが、トランザクションが送信されていません。この時点で、今月彼らの賃金をチェックするプログラマは、昇給は非常に満足していることを、その3000ドル以上、通常よりも発見しました。しかし、速やかに間違った上司は、ほとんどすぐに、提出されたトランザクションをロールバック36000に変更番号、次に提出します。分析- >実際のプログラマの給与今月または36,000が、プログラマの参照は39000です。上司がトランザクションをコミットしていないとき、彼はデータを見ました。これは、ダーティリードです。

             ④解決策:READコミットなどのより高度な分離メカニズムの使用。

       2は、コミット読み取り - 非反復可能読み取り(読み取りコミット)

             ①定義:他のトランザクションのコミット後にデータを読み込むためのトランザクションがあります。Oracleのデフォルトの分離レベル。

             ②短所:、ファントム読み取りを非反復可能読み取りを生成します。

             ③ 非反復可能読み取りケース:人生を楽しむためにクレジットカードを保持しているプログラマー(ケーリーコースは、唯一の36000である)、彼は手形を支払うとき(プログラマ情勢が開く)、充電システムは、彼のケーリーの前に検出された最初の(36,000を持っていますこの時点では第二読会)、!プログラマーの妻が自宅のようにして転送されたすべてのお金を提供して提出してください。充電システムは、充電に準備ができて、その後、ケーリー(第二読会)の量を検出した場合、我々は(もちろんの第二の試験量は取引金額を完了提出する彼の妻を待つが判明する)お金は認められません。プログラマは非常に、明らかに裕福な...ケーリー押される分析- >これは、読み取りコミット、トランザクションデータがされている場合で、更新(UPDATE)操作、読み出しトランザクションは、読み取りにトランザクションを提出した後、更新操作を待機しますダーティ・リードの問題を解決することができ、データを取ります。しかし、この場合には、あったトランザクションのスコープ内で、同じクエリが、2件の異なるデータが返さ非反復可能読み取りで、。

             ④解決策:そのような反復読出しのようなより高度な分離メカニズムの使用。

       図3は、(反復可能読み取り)を読み取るために繰り返すことができます

             0の場合の非反復可能読み取りを解決:人生を楽しむためにクレジットカードを保持しているプログラマー(カリーコースは、唯一の36000である)、彼は手形を支払うとき(オープン総務、UPDATEその他の事項の動作を変更することはできません)、充電システム、彼の前に検出されましたケーリー360万。この時間は、彼の妻がお金を出し転送することはできません。その後、料金システムを充電することができます。分析- >反復可能読み取りは非反復可能読み取りの問題を解決することができます。ここで書かれ、それは、すなわちUPDATE動作を変更された非反復可能読み取りに対応し、それを理解すべきです。しかし、それはまた、ファントム読み取り問題がある可能性があります。問題のファントムは、代わりに挿入INSERTに、UPDATE操作に対応する操作を読んでいるので。

             ①定義:読み取られるように、同じデータ上のトランザクションがデータを変更する他のトランザクションを気にしない、同じです。分離レベルをデフォルトのMySQL。

             ②短所:ファントム読み取り生成されます。

             ③ マジック読取り例:プログラマ1日、過ごす$ 2,000過ごす、そして彼の妻は、彼が実際に過ごした2000ドルを参照して、(全表スキャンFTS、妻情勢が開く)は、本日、レコードを費やし見に行ったために、この時点では、プログラマは10,000新しいINSERT消費者の記録であると提出コンピュータを、買って過ごしました。プログラマの妻は、レコードの消費量(妻のトランザクションコミット)のリストを印刷すると、12000元を費やし見つかった、幻想のように見える、これはファントム読み取りです。

             ④ソリューション:より高度な分離機構を用い、シリアライズ。

       4、配列の(直列化)

             ①定義:並行処理システムを犠牲にして、トランザクションの直列化の実行、隔離最高レベル、。

             ②短所:あなたは、同時トランザクションのすべての問題を解決することができます。しかし、地下、かかるデータベースのパフォーマンスの効率は、一般的には使用しないでください。

 

参照

1. Wuxiaoカイ https://www.cnblogs.com/ubuntu1/p/8999403.html

2. 魏Yabei  https://blog.csdn.net/u011861874/article/details/81539306

おすすめ

転載: www.cnblogs.com/frankcui/p/12008509.html