[良い] MySQLのトランザクション分離レベル

まず、トランザクションの説明
1、トランザクションの4つのACIDプロパティ
  1. A:=アトミックトランザクションまたは成功したか失敗したかを持っています。
  2. C:一貫性=トランザクション全体のライフサイクルの中では、データへのクエリが一致しています。
    MVCCマルチバージョン同時実行制御:使用は、互いに独立して、すべてのトランザクションことを確実にするために、バージョン番号によってロック競合を低減するために、一度にデータのスナップショットを保存元に戻します。
  3. I:アイソ=分離レベル。
  4. D:耐久性=長いトランザクションがコミットとして、トランザクションが原因でシステムの崩壊の失われることはありません。
  持続性とアトミックデータベースが満たされている、サポートサービスのすべてで同じです。
2、共通業務・フォーマット
トランザクションを開始。
  DML(挿入、削除、更新を;)
コミット;
3、MySQLは各DMLがトランザクションされているデフォルト
  デフォルトパラメータ「自動コミット」で、トランザクションをコミットするかどうかを制御します。
mysqlの>「自動コミット」のような変数を表示。
+ --------------- + ------- + 
| 変数名| バリュー| 
+ --------------- + ------- + 
| 自動コミット| ON | 
+ --------------- + ------- + 
セットにおける1行(0.01秒)
  SQL自動コミットは、特定のリスク(なしロールバック)がある、です。
  壁の亀裂は、お勧め:自動コミットSQLをシャットダウンします。
  悲しい教訓:キャリッジリターンQiaoxia屈原一度すぎsitesup一度自信を持って(実際に繰り返し確認している)、バックアップを無視して、コマンドラインで、問題を特定し、大きな......だから、バックアップ+明示的なコミット作ったが、非常に重要です。
4、大規模な取引+長いトランザクション
  大規模なトランザクションと長いトランザクションデータベースは、元に戻すの継続的な増加につながる爆発を元に戻す、スペースが再利用可能ではないでしょう。
  取引情報テーブル:information_schema.INNODB_TRX、長いトランザクションや大きな出来事を表示します。
5、+アイドル業務をロック
トランザクションを開始。
  更新;
  ...... //アイドル待機時間が暴走している可能性があり
  ...... //アイドル待機
  更新;
コミット;
  1.トランザクションとトランザクション・ロックは一定の関係を持っている:トランザクションが送信されていない、行がロックを解放しませんが、ロックが総務消えません
  2.デッドロックは:実行の過程で二つ以上のトランザクションの現象、お互いを待っによって引き起こされるリソースの競合のためにロックを指します。デッドロックの確率はInnoDBが組み込まれているのでチェック機構デッドロックは、非常に低く、デッドロックが自動的に発生した場合にロールバックより少ないリソースを占有し、トランザクションを元に戻します。
 
第二に、トランザクション分離レベル
0、分離
  分離レベルの1 MySQLの複数、より弱い分離良好並行性を調整することができます。
  2.各データベースには、独自のデフォルトの分離レベルを持っています
「%のイソ%」のようなMySQLの>ショー変数。
+ --------------- + ----------------- + 
| 変数名| バリュー| 
+ --------------- + ----------------- + 
| tx_isolation | REPEATABLE-READ | 
+ --------------- + ----------------- + 
セットにおける1行(0.01秒)

   セッション・レベルの設定:設定@@ session.tx_isolation = ......

1、READ-UNCOMMITED
  コミットされていない読み出し最も弱い分離、好ましくは並行処理;
  トランザクションを修正し、提出していない場合であっても、また、他のトランザクションに表示され、そのトランザクションデータがコミットされていない読み取ることができ、ダーティデータを読み出す(ダーティ、ダーティ・リードを読み取ります)。
2、READ-COMMITEDを
  ほとんどのデータベース・システムのデフォルトの分離レベルは、COMMITEDを読みますが、MySQLのではありませんされています。
  1.リードコミッティ、提出までは最初からトランザクションは、他のトランザクションに加えた変更は表示されません。
  2.非反復可能読み取りは、同じトランザクション内で、同じSQL実行時間、結果が異なる場合があります(トランザクションを記録した後は、提出した修正前のコミット):マジック読書。
3、REPEATABLE-READ
  反復可能読み取り、MySQLのデフォルトの分離レベル。
  同じトランザクション内で、同じSQLが複数回実行され、結果は同じです。
  セレクト一般1.が、それがダーティ・リードの問題を解決するために、MVCCによって達成され、ファントムは、問題を読み取ります。
  DML 2.は、更新のために選択し、範囲ロックを介して達成、課題を解決する魔法を読み取ります。
4、SERIALIZABLE
  (シリアライズシリアライズ、シリアライズ)最高、複雑な分離。
  同じデータについては、同期間中に、一つだけのセッションは、ファントムが問題を読み避けるために、トランザクションシリアル実行を実行することで、選択とDMLを含め、アクセスすることができます。
  つまり、同じ行のために、追加し、「書き込みロック」します「書き込み」、「ロックをお読みください。」が追加されます「読み取り」読み書きロックの競合が発生したときに完了したトランザクションの実行の訪問を進めることができない前に、トランザクションが待機しなければなりません。
  注意:そこ直列化されたビジネス・ニーズがありますが、我々は、シリアライズに、データベースのトランザクション分離レベルを設定しませんが、エンド・アプリケーション設定のソリューションで(例:U盾)。

おすすめ

転載: www.cnblogs.com/ExMan/p/11373848.html