従来の方法でテーブルにカラムを追加する場合、テーブル全体が再構築され、大量のシステムリソースが消費されます。この問題に対処するために、PolarDB for MySQL は、テーブルサイズに関係なくテーブルにカラムを即座に追加できるインスタント ADD COLUMN 機能を提供します。
インスタント ADD COLUMN 機能は、INSTANT アルゴリズム を活用して DDL 操作を実行します。データディクショナリ内のメタデータのみを変更します。既存のデータの変更やコピー、テーブル全体の再構築は行いません。したがって、DDL 操作はテーブルサイズに関係なく数秒で完了します。
前提条件
クラスターで、次のいずれかのデータベースエンジンバージョンが実行されている必要があります。
PolarDB for MySQL 5.6 (リビジョンバージョン 5.6.1.0.43 以降)。
説明インスタント ADD COLUMN 機能は、PolarDB for MySQL 5.6 ではカナリーリリースされています。PolarDB for MySQL 5.6 でこの機能を使用するには、クォータセンター にアクセスし、ID が
polardb_mysql_iac_56のクォータを見つけて、[適用] をクリックします。PolarDB for MySQL 5.7 (リビジョンバージョン 5.7.1.0.6 以降)。
説明PolarDB for MySQL 5.7 クラスターでインスタント ADD COLUMN 機能を使用するには、loose_innodb_support_instant_add_column パラメーターを ON に設定する必要があります。
PolarDB for MySQL 8.0。
説明デフォルトでは、PolarDB for MySQL 8.0 クラスターはインスタント ADD COLUMN 機能をサポートしています。この機能を有効にするためにパラメーターを設定する必要はありません。
クラスターのデータベースエンジンバージョンのクエリ方法については、「エンジンバージョン」トピックの「エンジンバージョンのクエリ」セクションをご参照ください。
制限事項
インスタント ADD COLUMN 機能を使用して、テーブルの末尾にのみカラムを追加できます。
インスタント ADD COLUMN 機能を使用して、PolarDB for MySQL 8.0 クラスターのテーブルにのみ仮想カラムを追加できます。PolarDB for MySQL 5.6 または 5.7 クラスターでは使用できません。
PolarDB for MySQL 5.7 および 8.0 クラスターのパーティションテーブルにカラムを追加するために、インスタント ADD COLUMN 機能を使用できますが、PolarDB for MySQL 5.6 クラスターでは使用できません。
説明パーティションテーブルにカラムを即座に追加できる機能は、PolarDB for MySQL 5.7 ではカナリーリリースされています。PolarDB for MySQL 5.7 でこの機能を使用するには、クォータセンター にアクセスし、ID が
polarM_57_iac_on_partition_tableのクォータを見つけて、[適用] をクリックします。フルテキストインデックスが作成されているテーブルにカラムを追加するために、インスタント ADD COLUMN 機能を使用することはできません。
インメモリ カラム インデックス (IMCI) が作成されているテーブルにカラムを追加するために、インスタント ADD COLUMN 機能を使用できます。クラスターは、次の要件を満たしている必要があります。
バージョンが 8.0.1.1.42 より前、または 8.0.2.2.23 より前の PolarDB for MySQL クラスターの場合、
imci_enable_add_column_instant_ddlをONに設定する必要があります。インスタント ADD COLUMN 機能を使用すると、テーブルの IMCI がバックグラウンドで再構築されます。再構築プロセス中は、IMCI は使用できません。バージョンが 8.0.1.1.42 以降、または 8.0.2.2.23 以降の PolarDB for MySQL クラスターの場合、
imci_enable_add_column_instant_ddlをOFFに設定する必要があります。
implicit_primary_keyオプションが有効になっているが、カスタム プライマリキー列がないテーブルにカラムを追加するために、インスタント ADD COLUMN 機能を使用することはできません。インスタント ADD COLUMN 操作と他の DDL 操作 (インデックスの作成など) を同じ SQL 文に含めることはできません。
使用方法
パラメーターの設定
PolarDB for MySQL 5.6 および 5.7 クラスターの場合、loose_innodb_support_instant_add_column パラメーターを ON に設定する必要があります。クラスターのパラメーターを設定する方法については、「クラスターとノードパラメーターの設定」をご参照ください。
パラメーター
レベル
説明
loose_innodb_support_instant_add_column
グローバル
インスタント ADD COLUMN 機能を有効にするかどうかを指定します。有効な値:
ON
OFF
PolarDB for MySQL 8.0 クラスターの場合、パラメーターを設定する必要はありません。
ステートメントの実行
ALGORITHM=INSTANT句を指定して、インスタント ADD COLUMN 機能を強制的に有効にします。例:ALTER TABLE <table_name> ADD COLUMN <column_name> int, ALGORITHM=INSTANT;説明インスタント ADD COLUMN 機能を使用してカラムを追加できず、
ERROR 0A000: ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE.エラーメッセージが返された場合、INSTANT アルゴリズムはサポートされていません。この場合、loose_innodb_support_instant_add_column パラメーターが ON に設定されているかどうか、および操作が制限されているかどうかを確認することをお勧めします。詳細については、「制限事項」をご参照ください。アルゴリズムを指定しない場合、またはデフォルトのアルゴリズムを指定した場合、PolarDB はカラムを追加するための最速のアルゴリズムを選択します。例:
ALTER TABLE <table_name> ADD COLUMN <column_name> int, ALGORITHM=DEFAULT; ALTER TABLE <table_name> ADD COLUMN <column_name> int;説明PolarDB は、INSTANT > INPLACE > COPY の優先順位でカラムを追加するためのアルゴリズムを選択します。
INSTANT アルゴリズムを使用して追加されたカラムの表示
PolarDB for MySQL 5.6 および 5.7 クラスターの場合、
INNODB_SYS_INSTANT_COLUMNSという名前のテーブルがINFORMATION_SCHEMAデータベースに追加されます。このテーブルには、即座に追加されたカラムに関する情報 (カラム名、カラムシーケンス番号、デフォルト値 (バイナリ値) など) が記録されます。新しく即座に追加されたカラムに関する情報を表示するには、次のステートメントを実行します。SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INSTANT_COLUMNS;説明テーブルにカラムを即座に追加し、DROP COLUMN などのテーブルを再作成する必要がある DDL 操作を実行した後、システムは即座に追加されたカラムに関する情報を
INNODB_SYS_INSTANT_COLUMNSテーブルから削除します。PolarDB for MySQL 8.0 クラスターの場合、次のステートメントを実行してテーブルのカラムを表示します。インスタント ADD COLUMN 機能を使用してカラムが追加された場合、
has_defaultパラメーターの値は 1 になります。SELECT * FROM INFORMATION_SCHEMA.INNODB_COLUMNS WHERE TABLE_ID = (SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME = "<database_name>/<table_name>");
お問い合わせ
DDL 操作についてご質問がある場合は、お問い合わせください。