いくつかはAUTO-INCロックを考えます

AUTO-INCロックがテーブルロックで、このロックは、ステートメントではなく、トランザクション(つまり、ロック上で実行された文がリリースされます)に適用されます。0、1の可能な値のAUTO-INCロックテーブルを制御するinnodb_autoinc_lock_modeロジック。

innodb_autoinc_lock_mode = 0(各テーブルには、ロックを有することになります)

単純なインサート(値挿入)、一括挿入のためかどうか(値に1を挿入し、混在モードインサート(deplicate鍵更新に挿入、(選択置き換える、選択に挿入)、「テスト」)、(NULL、「TEST2 「))は、SQLステートメントを入力し、SQL文が自動INCに各ロック・テーブルが生成され、各レコードは、AUTO_INCREMENT値を取得するための新しい行を生成します。この場合に生成さINSERT_IDは連続しているが、貧しい同時実行。

innodb_autoinc_lock_mode = 1(デフォルトでは、新たな方法の数が事前決意するために使用することができる、テーブルロックがロックGETバッチに数、単純な挿入を決定するために利用可能でない、連続確保するために挿入されました)

同じINSERT文新たに挿入されたAUTO_INCREMENT IDが連続していることを保証するために、高い同時実行、このモード:

「シンプル挿入」:直接文を解析することで、挿入したい番号、および十分なAUTO_INCREMENTのIDのワンタイム割り当てを取得し、全体のプロセスは、ロックされて割り当てられます。

「一括挿入」:それは挿入量決定ので、したがって前テーブルレベルロックの同じモードを使用しません。

「混在モード挿入」:文の直接分析は、最悪の場合の数を挿入する必要が得られ、十分AUTO_INCREMENT IDを次にワンタイム割り当て、全体のプロセスは、ロックされた割り当てられます。なお、このように、につながった、あまりにも多くのIDが割り当てられます「廃棄物」。5つのIDのワンタイム割当等INSERT INTO T1(C1、C2)の値(1、 'A')、(NULL、 'B')、(5、 'C')、(NULL、 'D')としてかかわらず、ユーザがパーツIDを指定するかどうか、にかかわらずかどうか、将来のために挿入プロセスの、INSERT ...重複キー更新時間割り当てにのみ鍵更新操作を複製行います。

innodb_autoinc_lock_mode = 2(現象が発生する生成櫛形INSERT_ID複数のSQL SQL処理にテーブルをロックしません)

そのようなパターンに割り当てられ、そして、このように、唯一のロックID割当処理を最高並行性テーブルをロックしないであろう、との差innodb_autoinc_lock_mode = 1は、このように同時に、予め割り当てられた複数のせず、ということです最高。しかし、ステートメントベースのレプリケーションでは、へbinlog_formatがそうするとき同時実行を割り当て、「一括挿入」もの配分の他のINSERTに割り当てるにあるよう際の問題(SBRのステートメントベースのレプリケーションとも呼ばれます)のみバイナリログレコード挿入IDが始まったので、(同じではないライブラリーから、メインライブラリの結果の実装の結果)矛盾マスタ・スレーブが存在することになります。innodb_autoinc_lock_mode = 2、安全でない、しかしが binlog_format = ROW、トランザクション分離= -READ COMMITTEDに、innodb_autoinc_lock_mode = 2は非常に安全です。

おすすめ

転載: www.cnblogs.com/kuafu1104/p/11417788.html