すべてのプロダクト
Search
ドキュメントセンター

PolarDB:DDL の実行特性の確認(EXPLAIN DDL)

最終更新日:Mar 29, 2026

ALTER TABLE 文を実行する前に、その実行特性を事前に確認できます。この機能では、データベースエンジンが選択するアルゴリズム、テーブル全体の再構築が必要かどうか、同時実行可能な DML の有無、および未コミットのトランザクションによるブロッキングの可能性などを示します。これらの情報をもとに、ビジネスへの影響を評価し、DDL の実行タイミングおよび方法を判断してください。

サポートされるバージョン

EXPLAIN DDL は以下のバージョンで利用可能です。

  • PolarDB for MySQL 8.0.1(リビジョン 8.0.1.1.49 以降)

  • PolarDB for MySQL 8.0.2(リビジョン 8.0.2.2.27 以降)

制限事項

  • InnoDB ストレージエンジンを使用するテーブルのみ対応しています。

  • 実際のデータは一切変更されません。

  • プライマリノードおよび読み取り専用ノードのいずれでも実行可能です。Possible blocked MDLs フィールドに表示される潜在的なロック競合は、現在のノードにおけるものに限定されます。

EXPLAIN DDL の有効化

EXPLAIN DDL はデフォルトで有効です。以下のパラメーターで機能を制御できます。設定方法については、「クラスターおよびノードのパラメーターの設定」をご参照ください。

パラメーターレベル説明デフォルト値
loose_polar_enable_explain_ddlグローバルEXPLAIN DDL を有効または無効にします。有効な値: ONOFFON
loose_polar_max_collect_thd_num_in_explain_ddlグローバル収集対象となる潜在的 MDL ブロッキングスレッドの最大数です。有効な値: 1~512。16

構文

{ EXPLAIN | DESCRIBE | DESC } ALTER TABLE ...

出力フィールド

ビジネスへの影響を直接決定する 4 つのフィールドがあります:AlgorithmMetadata OnlyRebuilt Table、および Concurrent DML。実行前にアクティブなロック競合を検出するには、Possible blocked MDLs をご活用ください。

フィールド説明
Error Noエラーコードです。0 の場合、ステートメントは正常に実行されました。0(成功)、またはエラーコード
Algorithmエンジンが使用するアルゴリズム。INSTANT は最も効率的です。COPY は最も効率が低く、書き込みをブロックします。INSTANTINPLACECOPYUnknown
Metadata Only操作がテーブルデータではなくメタデータのみを変更するかどうかを示します。メタデータのみの操作は、テーブルサイズに関係なく数秒で完了します。YesNoUnknown
Rebuilt Table操作がテーブル全体の再構築を必要とするかどうかを示します。大規模テーブルの再構築には時間がかかります。YesNoUnknown
Parallel Support操作が並列 DDL をサポートして処理を高速化できるかどうかを示します。YesYes, But Not EnabledNot NeededNoUnknown
Parallel DegreeDDL 操作で使用されるスレッド数です。-1 は「不明」を意味します。-1(不明)、1128
Concurrent DMLDDL 実行中に読み取りおよび書き込み操作が許可されるかどうかを示します。YesNoUnknown
Possible blocked MDLsDDL をブロックする可能性のある未コミットトランザクションを持つ接続のプロセス ID です。カンマ区切りのプロセス ID、または空欄
Error MsgError No に対応するエラーメッセージです。文字列
Suggest Info並列 DDL の有効化やロック競合の解消など、最適化に関する提案です。文字列
Statement解析対象の DDL ステートメントです。DDL ステートメント

アルゴリズムの効率順位

3 つのアルゴリズムは効率性の階層構造を形成しており、EXPLAIN DDL はエンジンが実際に選択した、その操作でサポートされる最も効率的なアルゴリズムを報告します。

アルゴリズムテーブル再構築同時実行可能な DML効率性
INSTANTいいえはい最高 — 数秒で完了
INPLACE操作内容により異なるはい中 — 大規模テーブルでは数分かかる場合あり
COPYはい不可最低 — 書き込みをブロック;ピーク時刻の実行は避けてください

操作リファレンス

特定の操作に対して EXPLAIN DDL を実行する前に、ビジネスへの影響を概算するために本表をご活用ください。本表は一般的な動作を反映したものであり、実際の環境での結果を確認するには、必ず EXPLAIN DDL を実行してください。

操作アルゴリズムメタデータのみテーブル再構築同時実行可能な DML典型的な影響
カラムの追加INSTANTYesNoYes数秒で完了;影響は最小限
テーブル名の変更INPLACEYesNoYes迅速に完了;影響は最小限
セカンダリインデックスの追加INPLACENoNoYes所要時間はテーブルサイズに依存;影響は小さい
テーブルの再構築INPLACENoYesYes多大なリソースを消費;非ピーク時刻に実行してください
カラム型の変更COPYNoYesNo書き込みをブロック;非ピーク時刻に実行してください

実行特性の確認

以下の例では、DDL 操作がビジネスの可用性に与える影響を評価するために EXPLAIN DDL を使用する方法を示します。

すべての例で、同一のテストテーブルを使用します。

SHOW CREATE TABLE t1\G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `a` int(11) DEFAULT NULL,
  `b` char(1) DEFAULT NULL,
  `c` char(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

カラムの追加

EXPLAIN ALTER TABLE t1 ADD COLUMN d INT;
*************************** 1. row ***************************
             Error No: 0
            Algorithm: INSTANT
        Metadata Only: Yes
        Rebuilt table: No
     Parallel Support: Not Need
      Parallel Degree: 1
       Concurrent DML: Yes
Possible blocked MDLs:
            Error Msg:
         Suggest Info:
            Statement: EXPLAIN ALTER TABLE t1 ADD COLUMN d int
1 row in set (0.00 sec)

INSTANT アルゴリズムは、テーブル再構築を伴わずメタデータのみを変更し、同時実行可能な DML を許可します。この操作は数秒で完了し、ビジネスへの影響は最小限です。

テーブル名の変更

EXPLAIN ALTER TABLE t1 rename t1_rn;
*************************** 1. row ***************************
             Error No: 0
            Algorithm: INPLACE
        Metadata Only: Yes
        Rebuilt table: No
     Parallel Support: Not Need
      Parallel Degree: 1
       Concurrent DML: Yes
Possible blocked MDLs:
            Error Msg:
         Suggest Info:
            Statement: EXPLAIN ALTER TABLE t1 rename t1_rn
1 row in set (0.01 sec)

INPLACE アルゴリズムは、テーブル再構築を伴わずメタデータのみを変更し、同時実行可能な DML を許可します。この操作はビジネスへの影響が最小限です。

カラム型の変更

EXPLAIN ALTER TABLE t1 modify COLUMN a char(1);
*************************** 1. row ***************************
             Error No: 0
            Algorithm: COPY
        Metadata Only: No
        Rebuilt table: Yes
     Parallel Support: No
      Parallel Degree: 1
       Concurrent DML: No
Possible blocked MDLs:
            Error Msg:
         Suggest Info:
            Statement: EXPLAIN ALTER TABLE t1 modify COLUMN a char(1)
1 row in set (0.01 sec)

COPY アルゴリズムは、テーブル全体の再構築を必要とし、同時実行可能な DML をブロックします。この操作はビジネスに大きな影響を与えるため、非ピーク時刻に実行してください。

テーブルの再構築

EXPLAIN ALTER TABLE t1 engine= innodb;
*************************** 1. row ***************************
             Error No: 0
            Algorithm: INPLACE
        Metadata Only: No
        Rebuilt table: Yes
     Parallel Support: Yes But Not Enable
      Parallel Degree: 1
       Concurrent DML: Yes
Possible blocked MDLs:
            Error Msg:
         Suggest Info: 1. This DDL operation could use Parallel DDL to speed up.
            Statement: EXPLAIN ALTER TABLE t1 engine= innodb

INPLACE アルゴリズムはテーブル全体の再構築を必要としますが、同時実行可能な DML を許可します。読み取りおよび書き込みをブロックしませんが、大規模テーブルの再構築には多大なリソースを消費するため、非ピーク時刻に実行してください。

Suggest Info フィールドには、並列 DDL を使用することでこの操作を高速化できることが示されています。詳細については、「並列 DDL のサポート状況の確認」をご参照ください。

並列 DDL のサポート状況の確認

PolarDB for MySQL では、DDL 操作の高速化のために並列 DDL をサポートしています。Parallel Support および Parallel Degree フィールドを確認することで、対象の操作が並列 DDL の恩恵を受けるかを判断できます。

  • Parallel Support の値が Yes, But Not Enabled の場合、その操作は並列 DDL をサポートしていますが、クラスター上で機能が有効化されていません。Suggest Info フィールドには「This DDL operation could use Parallel DDL to speed up.」と表示されます。並列 DDL を有効化するには、「並列 DDL」をご参照ください。

  • Parallel Support の値が Yes の場合、機能は有効化されており、実際に使用されています。EXPLAIN DDL は、現在のクラスターのワークロードに基づいて最適な並列処理の次数も推奨します。Suggest Info フィールドには「This DDL operation can be accelerated by increasing the value of 'innodb_polar_parallel_ddl_threads'. The recommended value is 8.」と表示されます。推奨値に従って innodb_polar_parallel_ddl_threads を調整し、パフォーマンスを向上させてください。

例:並列 DDL が無効の場合

並列 DDL が有効化されているかを確認します。

MySQL [test]> SHOW variables LIKE "%parallel_ddl_threads%";
+----------------------------------------------------+-------+
| Variable_name                                      | Value |
+----------------------------------------------------+-------+
| innodb_polar_innovate_default_parallel_ddl_threads | 1     |
| innodb_polar_parallel_ddl_threads                  | 1     |
+----------------------------------------------------+-------+
2 rows in set (0.03 sec)

並列 DDL は有効化されていません。セカンダリインデックスの追加操作について EXPLAIN を実行します。

EXPLAIN ALTER TABLE t1 ADD index k_a(a);
*************************** 1. row ***************************
             Error No: 0
            Algorithm: INPLACE
        Metadata Only: No
        Rebuilt table: No
     Parallel Support: Yes But Not Enable
      Parallel Degree: 1
       Concurrent DML: Yes
Possible blocked MDLs:
            Error Msg:
         Suggest Info: 1. This DDL operation could use Parallel DDL to speed up.
            Statement: EXPLAIN ALTER TABLE t1 ADD index k_a(a)
1 row in set (0.01 sec)

Parallel Support: Yes But Not Enabled は、その操作が並列 DDL を使用可能であるが、機能が有効化されていないことを意味します。並列 DDL を有効化することで、処理を高速化できます。

例:並列 DDL が有効の場合

並列処理の次数を 2 に設定します。

MySQL [test]> SET innodb_polar_parallel_ddl_threads = 2;
Query OK, 0 rows affected (0.00 sec)

同じセカンダリインデックスの追加操作について EXPLAIN を実行します。

EXPLAIN ALTER TABLE t1 ADD index k_a(a);
*************************** 1. row ***************************
             Error No: 0
            Algorithm: INPLACE
        Metadata Only: No
        Rebuilt table: No
     Parallel Support: Yes
      Parallel Degree: 2
       Concurrent DML: Yes
Possible blocked MDLs:
            Error Msg:
         Suggest Info: 1. This DDL operation can be accelerated by increasing the value of 'innodb_polar_parallel_ddl_threads'. The recommended value is 8.
            Statement: explain ALTER TABLE t1 ADD index k_a(a)
1 row in set (0.01 sec)

Parallel Support: Yes および Parallel Degree: 2 は、操作が 2 つの並列スレッドで実行されていることを確認できます。現在のクラスターのワークロードが低いことから、Suggest Info では、さらなるパフォーマンス向上のために並列処理の次数を 8 に増やすよう推奨しています。

MDL ブロッキングの検出

テーブルに対する DDL 操作は、同一テーブル上のメタデータロック(MDL)を保持している未コミットトランザクションによってブロックされることがあります。極端なケースでは、検出されない MDL ブロッキングが接続の滞留やクラスターの不安定化を引き起こす可能性があります。Possible blocked MDLs フィールドを活用して、DDL 実行前にブロッキング接続を特定してください。

ブロッキングが存在する場合、Possible blocked MDLs には、未コミットトランザクションを持つ接続のプロセス ID が一覧表示されます。KILL または KILL QUERY を使用してそれらの接続を終了し、DDL のブロッキングを解除してください。

例:MDL ブロッキングの検出

接続 1 で、t1 に対するトランザクションを開始し、コミットせずにそのままにします。

MySQL [test]> begin;
Query OK, 0 rows affected (0.00 sec)

MySQL [test]> select * from t1;
Empty set (0.00 sec)

接続 2 で、t1 に対する EXPLAIN DDL を実行します。

EXPLAIN ALTER TABLE t1 engine= innodb;
*************************** 1. row ***************************
             Error No: 0
            Algorithm: INPLACE
        Metadata Only: No
        Rebuilt table: Yes
     Parallel Support: Yes But Not Enable
      Parallel Degree: 1
       Concurrent DML: Yes
Possible blocked MDLs: 18
            Error Msg:
         Suggest Info: 1. This DDL operation may be blocked by the threads listed under 'Possible blocked MDLs'.
2. This DDL operation could use Parallel DDL to speed up.
            Statement: EXPLAIN ALTER TABLE t1 engine= innodb

Possible blocked MDLs: 18 は、接続 18 が未コミットトランザクションを持ち、この DDL をブロックすることを示しています。処理を継続する前に、KILL 18 または KILL QUERY 18 を実行して接続を終了してください。

次のステップ