このトピックでは、コールドデータに対してDDL操作を実行する方法について説明します。
前提条件
クラスターは、リビジョンバージョンが8.0.2.2.23以降のMySQL 8.0.2を実行します。
クラスターのコールドデータアーカイブ機能が有効になっています。 詳細については、「コールドデータアーカイブの有効化」をご参照ください。
クラスタへの接続が確立される。 詳細については、「クラスターへの接続」をご参照ください。
コールドデータは、コンマ区切り値 (CSV) またはOptimized Row Columnar (ORC) 形式です。 次のセクションで説明するObject Storage Service (OSS) テーブルデータとコールドデータは、CSVまたはORC形式のコールドデータを指します。 IBD形式のコールドデータに対してDDL操作を実行する方法については、「PolarDB For MySQL V8.0.2のDDL実行モード」をご参照ください。
DDL実行アルゴリズム
PolarDB for MySQLは、コールドデータに対して次のDDL実行アルゴリズムをサポートしています。
INSTANT algorithm: DDL操作でINSTANTアルゴリズムを使用すると、データ辞書のメタデータのみが変更されます。 既存のデータは変更、コピー、または再構築されません。 DDL操作は、テーブルのサイズに関係なく、数秒で完了できます。
COPYアルゴリズム: DDL操作でCOPYアルゴリズムを使用すると、テーブル内のすべてのデータが新しいテーブルにコピーされます。 コピー操作中、元のテーブルはSHARED_NO_WRITE (SNW) ロックによってロックされます。 読み取り操作のみが許可されます。 書き込み操作は禁止されています。これは、頻繁な更新やテーブルへの書き込みに依存するビジネスに悪影響を及ぼします。
DDLステートメントを実行するときに、ALGORITHM句を使用して、使用するアルゴリズムを指定できます。 オプションは、DEFAULT、INSTANT、およびCOPYです。 DDL操作がサポートしていないアルゴリズムを指定すると、エラーが返されます。
ほとんどの場合、INSTANTアルゴリズムは、COPYアルゴリズムよりも高速であり、破壊的ではない。 algorithm句を使用してDDLアルゴリズムを手動で指定しない場合、PolarDB for MySQLはINSTANTアルゴリズムを使用します。 INSTANTアルゴリズムが適用できない場合は、COPYアルゴリズムが使用されます。 このセクションでは、INSTANTアルゴリズムの使用方法について説明します。
INSTANTアルゴリズム命令
8.0.2.2.23以降では、データ管理を強化するためのOSSコールドデータテーブルに対してOSS METAを有効にできます。 テーブルは、OSS METAがテーブルに対して有効になっている場合にのみ、INSTANTアルゴリズム (INSTANT DDL) を使用するDDL操作をサポートします。 テーブルでINSTANT DDLを使用するには、次の操作を実行します。
テーブルに対してOSS METAが有効になっているかどうかを確認します。
SHOW CREATE TABLE
文を実行して、テーブルに対してOSS METAが有効になっているかどうかを確認します。 出力に "OSS META=1" と表示された場合、テーブルに対してOSS METAが有効になります。show create table t \G *************************** 1。 行 *************************** テーブル: t テーブルの作成: テーブル 't' を作成 ( 'id' varchar(1000) DEFAULT NULL ) /*!99990 800020213ストレージOSS */ ENGINE=CSVデフォルトCHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */ /*!99990 OSS META=1 * /800020223 1行セット (0.00秒)
新しく作成したテーブルのOSS METAを有効にします。
use_oss_metaパラメーターを使用して、InnoDB非パーティションテーブルがOSS外部テーブルにアーカイブされる、InnoDBパーティションテーブルがOSS外部テーブルにアーカイブされる、またはInnoDBテーブルがOSSパーティションにアーカイブされるシナリオで作成される新しいOSS外部テーブルでOSS METAを有効または無効にできます。
次のステートメントを使用して、use_oss_metaパラメーターがONに設定されているかどうかを確認できます。
は "use_oss_meta" のような変数を示します。+ -------------- + --------- | Variable_name | 値 | + -------------- + --------- | use_oss_meta | オン | + -------------- + --------- セットの1列 (0.03秒)
use_oss_metaパラメーターがONに設定されている場合、データがアーカイブされる新しいOSSテーブルにはOSS METAマーカーが含まれます。
テーブルtエンジン=csvストレージossを変更します。クエリOK、影響を受ける3行 (2.13秒) 記録: 3重複: 0警告: 0 show create table t \G *************************** 1。 行 *************************** テーブル: t テーブルの作成: テーブル 't' を作成 ( 'id' varchar(1000) DEFAULT NULL ) /*!50100 */ /*!99990 800020213ストレージOSS * /エンジン=CSVデフォルト料金=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */ /*!99990 OSS META=1 * /800020223 セットの1列 (0.00秒)
alter table t1 changeパーティションp0 engine = orc; クエリOK、影響を受ける0行 (1.95秒) 記録: 0重複: 0警告: 0 ショー作成テーブルt1 \G *************************** 1。 行 *************************** テーブル: t1 テーブルの作成: テーブル 't1' を作成 ( 'id' int(11) DEFAULT NULL、 'name' varchar(20) DEFAULT NULL、 'order_time' datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020223 OSS META=1 */ CONNECTION='default_oss_server' /*!99990 800020205パーティーBY RANGE COLUMNS(id) (PARTITION p0は (10) エンジン=ORCより少ない値、 PARTITION p1の値は (20) エンジン=InnoDB、 PARTITION p2の値は (30) エンジン=InnoDB、 PARTITION p3は (40) エンジンよりも少ない値=InnoDB、 PARTITION p4は (50) エンジン=InnoDBより少ない値を示し、 PARTITION p5は、(60) エンジン=InnoDBよりも少ない値であり、 PARTITION p6の値は (70) エンジン=InnoDBよりも少なく、 PARTITION p7は (80) エンジンよりも少ない値=InnoDB、 PARTITION p8の値は (90) エンジン=InnoDB、 PARTITION p9は (100) エンジン=InnoDBより少ない値を示し、 PARTITION p10は (110) エンジン=InnoDBより少ない値 * / セットの1列 (0.00秒)
既存のテーブルに対してOSS METAを有効にします。
REPAIR
ステートメントを使用して、既存のテーブルに対してOSS METAを有効にできます。修理テーブルt; + ------- -------- -------------------------------- | テーブル | Op | Msg_type | Msg_text | + ------- -------- -------------------------------- | test.t | 修理 | ステータス | OK | + ------- -------- -------------------------------- セットの1列 (0.84秒) show create table t \G *************************** 1。 行 *************************** テーブル: t テーブルの作成: テーブル 't' を作成 ( 'id' varchar(1000) DEFAULT NULL ) /*!50100 */ /*!99990 800020213ストレージOSS * /エンジン=CSVデフォルト料金=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */ /*!99990 OSS META=1 * /800020223 1行セット (0.00秒)
説明REPAIRステートメントを実行すると、テーブルはXロックによってロックされます。 テーブルを照会または変更することはできません。 REPAIRステートメントの実行時間は、テーブルのサイズによって異なります。
テーブルのOSS METAを無効にします。
DISABLE
ステートメントを使用して、テーブルのOSS METAを無効にできます。alter table t disable oss meta; クエリOK、影響を受ける0行 (0.04秒) 記録: 0重複: 0警告: 0 show create table t \G *************************** 1。 行 *************************** テーブル: t テーブルの作成: テーブル 't' を作成 ( 'id' varchar(1000) DEFAULT NULL ) /*!50100 */ /*!99990 800020213ストレージOSS * /エンジン=CSVデフォルト料金セット=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' * / セットの1列 (0.00秒)
テーブルのOSS METAを無効にすると、テーブルにOSS METAマーカーが表示されなくなります。
説明DISABLE
ステートメントは、データベースサービスを再起動しなくてもすぐに有効になります。
DDL動作特性
操作列
操作 | テーブルの再構築 | メタデータの変更のみ |
列の追加 | 1なし | はい1 |
列を削除する | 可 | 任意 |
列の名前変更 | 任意 | 可 |
列の並べ替え | 可 | 任意 |
列のデフォルト値を指定する | 任意 | 可 |
列のコメントを変更する | 任意 | 可 |
列のタイプを変更する | 可 | 任意 |
VARCHAR列の長さを拡張する | 任意 | 可 |
列のUTF8mb3文字セットをUTF8mb4文字セットに変更する | 2なし | はい2 |
列のデフォルト値を削除する | 任意 | 可 |
列の自動増分値を変更する | 任意 | 可 |
列の値をNULLに変更する | 可 | 任意 |
列の値をNULL以外の値に変更する | 可 | 任意 |
ENUMまたはSET列の定義を変更する | 任意 | はい3 |
Instant ADD COLUMN機能は、OSS METAが有効になっているテーブルの最後にのみ列を追加します。 テーブルにプライマリキーが指定されていない場合、テーブルの最後に新しい列を追加するときに自動的に生成される暗黙のプライマリキー列との競合を防ぐために、
implicit_primery_key
パラメーターの値をOFFに設定する必要があります。 クラスターがInstant ADD COLUMN機能をサポートしていない場合は、COPYアルゴリズムを使用して列を追加します。 この場合、テーブルの再構築が必要です。 再構築プロセス中、テーブルに対する同時読み取り操作が許可されます。次の条件を満たす場合は, メタデータのみを変更することで, 列の文字セットをUTF8mb3からUTF8mb4に変更できます。 次の条件が満たされない場合は、COPYアルゴリズムを使用してテーブルを再構築する必要があります。 テーブルはロックされ、再構築操作中は読み取り操作のみが許可されます。
列タイプは、CHAR、VARCHAR、ENUM、またはTEXTです。
列にインデックスは作成されません。
文字セットを変換する前後の列の最大格納長が256バイトより短いか, または255バイトより長い。
DDLステートメントでalgorithm=INSTANTを指定すると、INSTANTアルゴリズムを強制的に使用できます。 INSTANTアルゴリズムを使用して操作を実行できない場合は、エラーが返されます。 例:
ALTER TABLEテストは列b charを変更します (1) CHARACTER SET utf8mb4デフォルトnull、algorithm = INSTANT; エラー1845 (0A000): ALGORITHM=INSTANTはこの操作ではサポートされていません。 ALGORITHM=COPY/INPLACEを試してください。
ENUM列またはSET列の末尾に新しい要素を追加し、データ型のストレージサイズが変更されない場合、テーブルを再構築する必要なくメタデータのみを変更できます。 そうでなければ、完全なテーブル再構築を伴うCOPYアルゴリズムが使用される。
テーブルの操作
操作 | テーブルの再構築 | メタデータの変更のみ |
METAの有効化 | 可 | 任意 |
METAを無効にする | 任意 | 可 |
文字セットを宣言するDeclare a character set | 任意 | 可 |
文字セットの変換 | 可 | 任意 |
テーブル名の変更 | 任意 | はい1 |
テーブルのコメントを変更する | 任意 | 可 |
データがOSSに格納されているテーブルの名前を変更しても、テーブルのデータは書き換えられません。 代わりに、対応するOSSデータファイルの名前が変更されます。 操作の速度はテーブルのサイズに比例し、メタデータのみを変更する他のINSTANT操作よりもわずかに遅くなります。