MySQL innodb_autoinc_lock_mode の詳細な紹介

黄舟
リリース: 2017-03-18 13:49:26
オリジナル
1159 人が閲覧しました

次のエディターは、MySQL innodb_autoinc_lock_mode の概要を示します。編集者はこれが非常に良いものだと思ったので、皆さんの参考として今から共有します。エディターに従って見てみましょう。

innodb_autoinc_lock_mode このパラメーターは、auto_increment 列を持つテーブルにデータを挿入するときの関連するロックの動作を制御します。

【0】まず挿入を分類しましょうまず、挿入は大きく3つに分類できます


1. t(name)の値('test')への挿入などの単純な挿入


2. データのロードなどの一括挿入 | ... への選択 ....


3. t(id,name) への挿入などの混合挿入 (1,'a') ) . 2. 1 これはコヒーレントを意味します

3. 2 これはインターリーブを意味します

【1.1】tradition(innodb_autoinc_lock_mode=0) モード:


1. 下位互換性機能を提供します


2.このモードでは、すべての挿入ステートメント (「挿入のような」) はステートメントの先頭でテーブル レベルの auto_inc ロックを取得し、ステートメントの最後でロックを解放する必要があります。ここで述べられていることはむしろステートメント レベルであることに注意してください。トランザクション レベルよりも、トランザクションには 1 つ以上のステートメントが含まれる場合があります。


3. 値の配布の予測可能性、継続性、再現性を保証できます。これにより、挿入ステートメントがスレーブにコピーされたときにマスターと同じ値を生成できるようになります (ステートメントのレプリケーション ベースのセキュリティが保証されます)。

4. このモードでは auto_inc ロックがステートメントの終わりまで保持されるため、同時挿入に影響します。

【1.2】consecutive(innodb_autoinc_lock_mode=1) モード:


1. このモードでは、単純挿入で一度に挿入される値の数がすぐに決まるため、 mysql は一度だけ使用できます。この挿入ステートメントに対して複数の連続した値を生成します。一般に、これはレプリケーションでも安全です (ステートメントベースのレプリケーションの安全性が保証されます)


2。このモードの利点は、ステートメントが対応する値を取得する限り、auto_inc ロックが事前に解放できることです


[1.3] interleaved(innodb_autoinc_lock_mode=2)。モード

1. このモードでは auto_inc ロックがないため、このモードのパフォーマンスは最高ですが、同じステートメントに対して取得される auto_incremant 値が異なる可能性もあります。連続的ではないこと。

【2】バイナリファイル形式が混在している場合、これらの 3 つの値のいずれもコピーセーフになります。

現在、mysql はバイナリ形式を row に設定することを推奨しているため、binlog_

format がステートメントではない場合は innodb_autoinc_lock_mode=2 を使用するのが最適です。これによりパフォーマンスが向上する可能性があります。
最後に auto_increment に関する例で終わります
例:

行わないでください

auto_increment 列の値を更新

ステップ 1: シーンを再現します

create table t(x int auto_increment not null primary key);
insert into t(x) values(0),(null),(3);
select * from t;
+---+
| x |
+---+
| 1 |
| 2 |
| 3 |
+---+
ログイン後にコピー

ステップ 2: 再現します。問題の原因となった SQL

update t set x=4 where x=1;
select * from t;
+---+
| x |
+---+
| 2 |
| 3 |
| 4 |
+---+
ログイン後にコピー

ステップ 3: 通常の式の形式を再現します

insert into t(x) values(0);
ERROR 1062 (23000): Duplicate entry '4' for key 'PRIMARY'
ログイン後にコピー
ステップ 4: 問題の概要

最初のステップを実行した後、mysql は次の auto_increment を認識します。値は 4 です。

2 番目のステップを実行した後、mysql は 4 が人為的に占有されたことを認識しなかったため、3 番目のステップの実行時にエラーが発生しました。

以上がMySQL innodb_autoinc_lock_mode の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート