インプレースのオンライン DDL 操作の領域要件の概要を次に示します。 領域要件は、即時に実行される操作には適用されません。
-
一時ログファイル用の領域
一時ログファイルには、オンライン DDL 操作によってインデックスが作成されるか、テーブルが変更されると、同時 DML が記録されます。 一時ログファイルは、
innodb_sort_buffer_size
の値によって必要に応じて、innodb_online_alter_log_max_size
で指定された最大値まで拡張されます。 一時ログファイルがサイズ制限を超えると、オンライン DDL 操作は失敗し、コミットされていない同時 DML 操作がロールバックされます。 大規模なinnodb_online_alter_log_max_size
設定では、オンライン DDL 操作中により多くの DML が許可されますが、ログに記録された DML を適用するためにテーブルがロックされている場合、DDL 操作の終了時の期間も延長されます。操作に時間がかかり、一時ログファイルのサイズが
innodb_online_alter_log_max_size
の値を超えるように同時 DML によってテーブルが変更された場合、オンライン DDL 操作はDB_ONLINE_LOG_TOO_BIG
エラーで失敗します。 -
一時ソートファイル用の領域
テーブルを再構築するオンライン DDL 操作では、インデックスの作成時に一時ソートファイルが MySQL 一時ディレクトリ (Unix の場合は
$TMPDIR
、Windows の場合は%TEMP%
、--tmpdir
で指定されたディレクトリ) に書き込まれます。 一時ソートファイルは、元のテーブルを含むディレクトリには作成されません。 各一時ソートファイルは、1 つのデータカラムを保持するのに十分な大きさであり、各ソートファイルは、そのデータが最終的なテーブルまたはインデックスにマージされると削除されます。 一時ソートファイルを使用する操作には、テーブルのデータ量にインデックスを加えたものと同じ一時領域が必要になる場合があります。 オンライン DDL 操作で、データディレクトリが存在するファイルシステム上の使用可能なすべてのディスク領域が使用されている場合は、エラーが報告されます。MySQL 一時ディレクトリがソートファイルを保持するのに十分な大きさでない場合は、
tmpdir
を別のディレクトリに設定します。 または、innodb_tmpdir
を使用して、オンライン DDL 操作用に個別の一時ディレクトリを定義します。 このオプションは、大規模な一時ソートファイルの結果として発生する可能性のある一時ディレクトリのオーバーフローを回避するために導入されました。 -
中間テーブルファイル用の領域
テーブルを再構築する一部のオンライン DDL 操作では、元のテーブルと同じディレクトリに一時中間テーブルファイルが作成されます。 中間テーブルファイルには、元のテーブルのサイズと等しい領域が必要な場合があります。 中間テーブルのファイル名は
#sql-ib
接頭辞で始まり、オンライン DDL 操作中にのみ簡単に表示されます。innodb_tmpdir
オプションは、中間テーブルファイルには適用されません。