従来の方法を使用してテーブルに列を追加すると、テーブル全体が再構築され、大量のシステムリソースが消費されます。 この問題に対処するために、PolarDB for MySQLはインスタントADD COLUMN
機能を提供しています。 インスタントADD COLUMN機能を使用してテーブルに列を追加すると、テーブルの定義のみが変更されます。 インスタントADD COLUMN機能を使用すると、テーブルのサイズに関係なく、テーブルに列を即座に追加できます。 このトピックでは、インスタントADD COLUMN機能の使用方法について説明します。
前提条件
クラスターは、次のいずれかのデータベースエンジンバージョンを実行します。
リビジョンバージョンが5.6.1.0.43以降のPolarDB for MySQL5.6。 クラスターのデータベースエンジンバージョンを照会する方法については、「エンジンバージョン」トピックの「エンジンバージョンの照会」を参照してください。
説明インスタントADD COLUMN機能は、PolarDB for MySQL 5.6のカナリアリリースにあります。 PolarDB for MySQL 5.6でこの機能を使用するには、Quota Centerに移動し、IDが
polardb_mysql_iac_56
のクォータを見つけて、[適用] をクリックします。リビジョンバージョンが5.7.1.0.6以降のPolarDB for MySQL 5.7。 クラスターのデータベースエンジンバージョンを照会する方法については、「エンジンバージョン」トピックの「エンジンバージョンの照会」を参照してください。
説明PolarDB for MySQL 5.7クラスターでインスタントADD COLUMN機能を使用するには、loose_innodb_support_instant_add_columnパラメーターをONに設定する必要があります。
PolarDB for MySQL8.0。
説明デフォルトでは、PolarDB for MySQL 8.0クラスターはインスタントADD COLUMN機能をサポートしています。 機能を有効にするためにパラメーターを設定する必要はありません。
制限事項
インスタントADD COLUMN機能を使用して、テーブルの最後にのみ列を追加できます。
インスタントADD COLUMN機能を使用して、PolarDB for MySQL 8.0でのみ仮想列をテーブルに追加できます。
インスタントADD COLUMN機能を使用して、PolarDB for MySQL 5.6のパーティションテーブルに列を追加することはできません。 インスタントADD COLUMN機能を使用して、PolarDB for MySQL 5.7およびPolarDB for MySQL 8.0のパーティションテーブルに列を追加できます。
説明パーティションテーブルに列を即座に追加できる機能は、PolarDB for MySQL 5.7のカナリアリリースにあります。 PolarDB for MySQL 5.7でこの機能を使用するには、Quota Centerに移動し、IDが
polarM_57_iac_on_partition_table
であるクォータを見つけ、[適用] をクリックします。インスタントADD COLUMN機能を使用して、フルテキストインデックスまたはインメモリ列インデックス (IMCI) が作成されているテーブルに列を追加することはできません。
[暗黙の主キー]
オプションが有効になっているが、カスタム主キー列がないテーブルに列を追加するには、インスタント列の追加機能を使用することはできません。インスタントADD COLUMN
操作と他のDDL操作を同じSQL文に含めることはできません。
使用状況
パラメーターの設定
PolarDB for MySQL 5.6またはPolarDB for MySQL 5.7クラスターでインスタントADD COLUMN機能を使用するには、loose_innodb_support_instant_add_columnパラメーターをONに設定する必要があります。 クラスターのパラメーターの設定方法については、「クラスターとノードパラメーターの設定」をご参照ください。
説明デフォルトでは、PolarDB for MySQL 8.0クラスターはインスタントADD COLUMN列機能をサポートしています。 機能を有効にするためにパラメーターを設定する必要はありません。
パラメーター
レベル
説明
loose_innodb_support_instant_add_列
グローバル
インスタントADD COLUMN機能を有効にするかどうかを指定します。 有効な値:
オン
オフ
Executeステートメント
ALGORITHM=INSTANT
句を指定して、インスタントADD COLUMN機能を強制的に有効にすることができます。 例:ALTER TABLE test.t ADD COLUMN test_column int, ALGORITHM=INSTANT;
インスタントADD column機能を使用して列を追加できない場合、この操作では
ERROR 0A000: ALGORITHM=instantはサポートされません。 ALGORITHM=COPY/INPLACE.
をお試しください エラーメッセージが返されます。 この場合、loose_innodb_support_instant_add_columnパラメーターがONに設定されているかどうかを確認し、操作が制限されているかどうかを確認することを推奨します。 インスタントADD COLUMN機能の制限については、このトピックの「制限」セクションを参照してください。アルゴリズムを指定しない場合、またはデフォルトのアルゴリズムを指定する場合、PolarDBは列を追加するための最速のアルゴリズムを選択します。 例:
ALTER TABLE test.t ADD COLUMN test_column int, ALGORITHM=DEFAULT; ALTER TABLE test.t ADD COLUMN test_column int;
説明PolarDBは、INSTANT > INPLACE > COPYの優先順位で列を追加するアルゴリズムを選択します。
INSTANTアルゴリズムを使用して追加された列の表示
INNODB_SYS_INSTANT_COLUMNS
テーブルという名前のテーブルが、PolarDB for MySQL 5.6およびPolarDB for MySQL 5.7クラスターの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 = "test/t1");
お問い合わせ
DDL操作についてご質問がある場合は、お気軽にお問い合わせください。