MySQL 8.0 リファレンスマニュアル


15.12 InnoDB とオンライン DDL

オンライン DDL 機能では、即時およびインプレースのテーブル変更および同時 DML がサポートされます。 この機能の利点は次のとおりです:

  • ビジーな本番環境での応答性と可用性が向上し、テーブルを数分間または数時間使用できなくなります。

  • インプレース操作の場合、LOCK 句を使用して DDL 操作中のパフォーマンスと同時実行性のバランスを調整する機能。 LOCK 句を参照してください。

  • テーブルコピー方法よりもディスク領域の使用量と I/O のオーバーヘッドが少なくなります。

注記

ALGORITHM=INSTANT のサポートは、ADD COLUMN および MySQL 8.0.12 のその他の操作で使用できます。

通常、オンライン DDL を有効にするために特別な操作を行う必要はありません。 デフォルトでは、MySQL は操作を許可されているとおりに即時またはインプレースで実行しますが、ロックはできるかぎり少なくなります。

ALTER TABLE ステートメントの ALGORITHM 句および LOCK 句を使用して、DDL 操作の側面を制御できます。 これらの句は、テーブルおよびカラムの指定からカンマで区切ってステートメントの最後に配置されます。 例:

ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;

LOCK 句は、インプレースで実行される操作に使用でき、操作中のテーブルへの同時アクセスの程度を微調整する場合に役立ちます。 即時に実行される操作では、LOCK=DEFAULT のみがサポートされます。 ALGORITHM 句は、主にパフォーマンスの比較と、問題が発生した場合の古いテーブルコピー動作へのフォールバックを目的としています。 例:

  • インプレースの ALTER TABLE 操作中に、誤ってテーブルを読取りまたは書込み (あるいはその両方) に使用できないようにするには、LOCK=NONE (読取りおよび書込みの許可) や LOCK=SHARED (読取りの許可) などの句を ALTER TABLE ステートメントに指定します。 要求されたレベルの並列性が使用できない場合、操作はただちに停止します。

  • アルゴリズム間でパフォーマンスを比較するには、ALGORITHM=INSTANTALGORITHM=INPLACE および ALGORITHM=COPY でステートメントを実行します。 old_alter_table 構成オプションを有効にしてステートメントを実行し、ALGORITHM=COPY を強制的に使用することもできます。

  • テーブルをコピーする ALTER TABLE 操作でサーバーがタイアップされないようにするには、ALGORITHM=INSTANT または ALGORITHM=INPLACE を含めます。 指定されたアルゴリズムを使用できない場合、ステートメントはただちに停止します。


関連キーワード:  InnoDB, テーブル, 構成, 操作, オンライン, ステートメント, ロック, 圧縮, スペース, 実行