オンライン DDL 操作の失敗は、通常、次のいずれかの状況が原因です:
ALGORITHM
句では、特定のタイプの DDL 操作またはストレージエンジンと互換性のないアルゴリズムを指定します。LOCK
句では、特定のタイプの DDL 操作と互換性のない低レベルのロック (SHARED
またはNONE
) を指定します。テーブルでの exclusive lock の待機中にタイムアウトが発生し、DDL 操作の初期フェーズおよび最終フェーズで短時間必要になる場合があります。
tmpdir
またはinnodb_tmpdir
ファイルシステムのディスク領域が不足していますが、MySQL はインデックスの作成中に一時ソートファイルをディスクに書き込みます。 詳細は、セクション15.12.3「オンライン DDL 領域の要件」を参照してください。操作には時間がかかり、同時 DML は一時オンラインログのサイズが
innodb_online_alter_log_max_size
構成オプションの値を超えるようにテーブルを変更します。 この状態はDB_ONLINE_LOG_TOO_BIG
エラーの原因になります。同時 DML は、元のテーブル定義では許可されているが、新しいテーブル定義では許可されていないテーブルに変更を加えます。 この操作は、MySQL がいちばん最後に、並列 DML ステートメントからのすべての変更を適用しようとしたときにのみ失敗します。 たとえば、一意のインデックスの作成中にカラムに重複した値を挿入したり、そのカラムでの主キーのインデックスの作成中にカラムに
NULL
値を挿入したりすることがあります。 並列 DML によって行われた変更が優先され、ALTER TABLE
操作は実質的にロールバックされます。