オンライン 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=INSTANT
、ALGORITHM=INPLACE
およびALGORITHM=COPY
でステートメントを実行します。old_alter_table
構成オプションを有効にしてステートメントを実行し、ALGORITHM=COPY
を強制的に使用することもできます。テーブルをコピーする
ALTER TABLE
操作でサーバーがタイアップされないようにするには、ALGORITHM=INSTANT
またはALGORITHM=INPLACE
を含めます。 指定されたアルゴリズムを使用できない場合、ステートメントはただちに停止します。