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