Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


8.10.3 同時挿入

MyISAM ストレージエンジンでは、特定のテーブルに対する読み取りと書き込みの競合を軽減するために、同時挿入をサポートしています。MyISAM テーブルのデータファイルに隙間 (途中の削除された行) がない場合、SELECT ステートメントがテーブルの行を読み取るのと同時に、INSERT ステートメントを実行してテーブルの末尾に行を追加できます。複数の INSERT ステートメントがある場合、それらはキューに入れられ、SELECT ステートメントと同時に順番に実行されます。同時 INSERT の結果はすぐに見られないことがあります。

concurrent_insert システム変数を設定して、同時挿入の処理を変更できます。デフォルトで、変数は AUTO (または 1) に設定され、同時挿入が先述のように処理されます。concurrent_insertNEVER (または 0) に設定されている場合、同時挿入は無効にされます。変数が ALWAYS (または 2) に設定されている場合、行が削除されたテーブルに対してもテーブルの末尾での同時挿入が許可されます。concurrent_insert システム変数の説明も参照してください。

同時挿入を使用できる状況下では、INSERT ステートメントの DELAYED 修飾子を使用する必要はほとんどありません。セクション13.2.5.2「INSERT DELAYED 構文」を参照してください。

バイナリログを使用している場合、同時挿入は CREATE ... SELECT または INSERT ... SELECT ステートメントの通常の挿入に変換されます。これは、バックアップ操作中にログを適用することでテーブルの正確なコピーを確実に再作成できるようにするために行われます。セクション5.2.4「バイナリログ」を参照してください。また、これらのステートメントに対しては、選択元のテーブルへの挿入がブロックされるように、そのテーブルに読み取りロックが設定されます。その結果、そのテーブルに対する同時挿入も待機する必要があります。

LOAD DATA INFILE で同時挿入の条件 (つまり、途中に空きブロックを含まない) を満たす MyISAM テーブルを使用して CONCURRENT を指定する場合、ほかのセッションは LOAD DATA の実行中にテーブルからデータを取得できます。CONCURRENT オプションの使用は、同時にテーブルを使用しているほかのセッションがない場合でも、LOAD DATA のパフォーマンスに多少の影響があります。

HIGH_PRIORITY を指定すると、サーバーが --low-priority-updates オプションで起動されている場合に、その効果がオーバーライドされます。また、同時挿入も使用されなくなります。

LOCK TABLE の場合、READ LOCALREAD の違いは READ LOCAL が、ロックが保持されている間に、競合していない INSERT ステートメント (同時挿入) の実行を許可することです。ただし、ロックを保持している間にサーバーの外部のプロセスを使用してデータベースを操作する場合、これを使用することはできません。