従来の列追加では、テーブル全体を再構築する必要があり、大量のシステムリソースを消費します。PolarDB for MySQL クラスターは、インスタントカラム追加をサポートしています。これにより、テーブルサイズに関係なく、数秒で列を追加できます。
インスタントカラム追加機能は、INSTANT アルゴリズムを使用して DDL 操作を実行します。この機能はデータディクショナリ内のメタデータのみを変更し、既存データの変更やコピー、テーブルの再構築は行いません。そのため、このプロセスはテーブルサイズに関係なく機能し、DDL 操作全体が数秒で完了します。
サポートされるバージョン
ご利用のクラスターは、次のいずれかのバージョンを実行している必要があります:
PolarDB for MySQL 5.6 (リビジョン 5.6.1.0.43 以降)。
説明PolarDB for MySQL 5.6 のインスタントカラム追加機能はカナリアリリース中です。この機能を使用するには、クォータセンターに移動してください。
polardb_mysql_iac_56という名前のクォータを見つけ、[操作] 列の [申請] をクリックします。PolarDB for MySQL 5.7 (リビジョン 5.7.1.0.6 以降)。
説明PolarDB for MySQL 5.7 クラスターでこの機能を使用する前に、loose_innodb_support_instant_add_column パラメーターを有効にする必要があります。
PolarDB for MySQL 8.0。
説明PolarDB for MySQL 8.0 クラスターは、デフォルトでインスタントカラム追加をサポートしています。パラメーターの設定は不要です。
クラスターのリビジョン番号を確認できます。詳細については、「バージョン番号の確認」をご参照ください。
制限事項
列は、テーブルの最後の列としてのみ追加できます。
仮想カラムの追加:
PolarDB for MySQL 5.6 および 5.7:サポートされていません。
PolarDB for MySQL 8.0:サポートされています。
パーティションテーブルへのフィールドの秒速追加:
PolarDB for MySQL 5.6:サポートされていません。
PolarDB for MySQL 5.7 および 8.0:サポートされています。
説明PolarDB for MySQL 5.7 のパーティションテーブルに対するインスタントカラム追加機能はカナリアリリース中です。この機能を使用するには、クォータセンターに移動してください。
polarM_57_iac_on_partition_tableという名前のクォータを見つけ、[操作] 列の [申請] をクリックします。
テーブルの全文検索インデックスはサポートされていません。
ROW_FORMAT が COMPRESSED に設定されているテーブルはサポートされていません。
インメモリ列指向インデックス (IMCI) を持つテーブルにインスタントカラム追加は可能ですが、以下の条件を満たす必要があります:
PolarDB for MySQL 8.0.1.1.42 以前、または 8.0.2.2.23 以前の場合:
imci_enable_add_column_instant_ddlパラメーターをONに設定します。有効にすると、インスタントカラム追加は IMCI のサイレントなバックグラウンドでの再構築をトリガーします。再構築中、IMCI は利用できません。PolarDB for MySQL 8.0.1.1.42 以降、または 8.0.2.2.23 以降の場合:
imci_enable_add_column_instant_ddlパラメーターをOFFに設定します。
implicit_primary_keyオプションが有効になっているテーブルには、カスタムプライマリキーが必要です。インスタントカラム追加を、インデックスの追加など他の DDL 操作と同一の SQL ステートメント内で組み合わせることはできません。
使用方法
パラメーター設定
PolarDB for MySQL 5.6 および 5.7 クラスター:loose_innodb_support_instant_add_column パラメーターを有効にして、インスタントカラム追加を使用します。手順については、「パラメーターの有効化」をご参照ください。
パラメーター
レベル
説明
loose_innodb_support_instant_add_column
グローバル
インスタントカラム追加を有効または無効にします。有効な値:
ON:インスタントカラム追加を有効にします。
OFF (デフォルト):インスタントカラム追加を無効にします。
PolarDB for MySQL 8.0 クラスター:パラメーターを設定せずにインスタントカラム追加を使用できます。
構文
ALGORITHM=INSTANTを指定して、インスタントカラム追加を強制します。例:ALTER TABLE <table_name> ADD COLUMN <column_name> int, ALGORITHM=INSTANT;説明このステートメントが
ERROR 0A000: ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE.を返す場合、この操作ではインスタントカラム追加はサポートされていません。loose_innodb_support_instant_add_column パラメーターが有効になっているかを確認し、制限事項を確認してください。ALGORITHM句を省略するか、ALGORITHM=DEFAULTを指定します。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 クラスター:
INFORMATION_SCHEMAデータベースにINNODB_SYS_INSTANT_COLUMNSという名前の新しいテーブルが表示されます。このテーブルには、INSTANT アルゴリズムを使用して追加された列の詳細 (列名、序数、デフォルト値 (バイナリ形式で保存) など) が格納されます。次のステートメントを実行して詳細を表示できます:SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INSTANT_COLUMNS;説明INSTANTアルゴリズムを使用して対象テーブルに列を追加した後、テーブルの再構築をトリガーする DDL 操作 (例:OPTIMIZE TABLE) を実行すると、テーブルは物理的に再構築されます。このプロセス中に、元のINSTANT列は自動的に通常の列に変換され、そのデータは新しいテーブルに完全に保持されます。これらの列はINSTANTアルゴリズムをサポートしなくなるため、システムテーブルINNODB_SYS_INSTANT_COLUMNS内の対応するレコードは削除されます。PolarDB for MySQL 8.0 クラスター:次のステートメントを実行して列の詳細を表示できます。
has_default列に 1 が表示されている場合、その列は INSTANT アルゴリズムを使用して追加されたものです。SELECT * FROM INFORMATION_SCHEMA.INNODB_COLUMNS WHERE TABLE_ID = (SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME = "<database_name>/<table_name>");
お問い合わせ
DDL 操作についてご不明な点がある場合は、テクニカルサポートにお問い合わせください。