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

PolarDB:DDL 文の実行ステータスと MDL ステータスの表示

最終更新日:Jun 25, 2025

PolarDB は、DDL 文の実行ステータスとメタデータロック (MDL) ステータスを監視するための Polar パフォーマンススキーマ機能を提供します。 MySQL のパフォーマンススキーマ機能と比較して、Polar パフォーマンススキーマ機能はより軽量で、使用するメモリリソースが少なく、パフォーマンスのオーバーヘッドが低くなっています。 このトピックでは、この機能を使用して DDL 文の実行ステータスと MDL ステータスを表示する方法について説明します。

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

PolarDB for MySQL クラスタは、次のデータベースエンジンバージョンのいずれかを実行している必要があります。

  • PolarDB for MySQL 5.7 のクラスタ (リビジョンバージョン 5.7.1.0.35 以降)。

  • PolarDB for MySQL 8.0.1 のクラスタ (リビジョンバージョン 8.0.1.1.21 以降)。

  • PolarDB for MySQL 8.0.2 のクラスタ (リビジョンバージョン 8.0.2.2.8 以降)。

クラスタのデータベースエンジンバージョンを表示する方法については、「エンジンバージョンのクエリ」をご参照ください。

問題

DDL 文はクラスタのプライマリノードで実行されます。 したがって、プライマリノードで DDL 文の実行ステータスをクエリする必要があります。

  • プライマリエンドポイントを使用してクラスタに接続する場合、プライマリノードで DDL 文の実行ステータスを直接クエリできます。 プライマリエンドポイントをクエリする方法については、「エンドポイントとポート番号の表示」をご参照ください。

  • クラスタエンドポイントを使用してクラスタに接続する場合は、SQL 文でヒントを使用して、プライマリノードで DDL 文の実行ステータスをクエリできます。 詳細については、「読み取り/書き込み分割」をご参照ください。

パフォーマンススキーマ機能を有効にすると、Polar パフォーマンススキーマ機能は自動的に無効になります。

手順

説明

このトピックで紹介されているメソッドは、InnoDB ストレージエンジンを使用するテーブルにのみ適用されます。

  1. Polar パフォーマンススキーマ機能を有効にします。

    Polar パフォーマンススキーマ機能を有効にするには、PolarDB コンソールで loose_polar_performance_schema パラメータを ON に設定します。 このパラメータは、クラスタを再起動した後にのみ有効になります。 詳細については、「クラスタとノードパラメータの設定」をご参照ください。

    次の表に、Polar パフォーマンススキーマ機能のパラメータを示します。

    パラメータ

    説明

    loose_polar_performance_schema

    Polar パフォーマンススキーマ機能を有効にするかどうかを指定します。 有効な値:

    • ON

    • OFF

    loose_polar_performance_schema_enable_row_locks

    Polar パフォーマンススキーマが行レベルのロック監視データを収集および公開するかどうかを指定します。

    • OFF (デフォルト)

    • ON

    説明

    このパラメータは、PolarDB for MySQL 8.0.1 および 8.0.2 でのみ使用できます。

    performance_schema_max_thread_instances

    Polar パフォーマンススキーマ機能によって追跡されるスレッドの最大数。 有効な値:-1 ~ 65536。 -1 の値は、MDL の数がビジネスの変化に適応するように自動的に調整されることを指定します。

    説明

    このパラメータは微調整されています。 変更しないことをお勧めします。

    performance_schema_max_metadata_locks

    Polar パフォーマンススキーマ機能によって監視される MDL の最大数。 有効な値:-1 ~ 1048576。 -1 の値は、MDL の数がビジネスの変化に適応するように自動的に調整されることを指定します。

    説明

    このパラメータは微調整されています。 変更しないことをお勧めします。

    クラスタが起動した後、次の文を実行して、Polar パフォーマンススキーマ機能が有効になっているかどうかを確認できます。

    SHOW VARIABLES LIKE 'polar_performance_schema';

    同様の結果が返されます。

    +--------------------------+-------+
    | Variable_name            | Value |
    +--------------------------+-------+
    | polar_performance_schema | ON    |
    +--------------------------+-------+
    1 row in set (0.00 sec)
  2. DDL 文の実行ステータスと MDL ステータスを表示します。

    • performance_schema.events_stages_current テーブルから現在のイベントの実行ステータスを表示します。 サンプル文:

      SELECT THREAD_ID,EVENT_ID, EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED,(WORK_COMPLETED/WORK_ESTIMATED)*100 as PROGRESS FROM performance_schema.events_stages_current;

      サンプル結果:

      +-----------+----------+------------------------------------------------------+----------------+----------------+----------+
      | THREAD_ID | EVENT_ID | EVENT_NAME                                           | WORK_COMPLETED | WORK_ESTIMATED | PROGRESS |
      +-----------+----------+------------------------------------------------------+----------------+----------------+----------+
      |   3057989 |       13 | stage/innodb/alter table (read PK and internal sort) |          56634 |         330135 |  17.1548 |
      +-----------+----------+------------------------------------------------------+----------------+----------------+----------+
      1 row in set (0.00 sec)

      performance_schema.threads テーブルと information_schema.PROCESSLIST テーブルから現在のイベントの SQL 文を表示します。 サンプル文:

      SELECT esc.THREAD_ID, esc.EVENT_NAME, esc.WORK_COMPLETED, esc.WORK_ESTIMATED, pl.INFO FROM performance_schema.events_stages_current esc LEFT JOIN performance_schema.threads th ON esc.thread_id = th.thread_id LEFT JOIN information_schema.PROCESSLIST pl ON th.PROCESSLIST_ID = pl.ID;

      サンプル結果:

      +-----------+------------------------------------------------------+----------------+----------------+-----------------------------------------------------------------------------------------+
      | THREAD_ID | EVENT_NAME                                           | WORK_COMPLETED | WORK_ESTIMATED | INFO                                                                                    |
      +-----------+------------------------------------------------------+----------------+----------------+-----------------------------------------------------------------------------------------+
      |   3057989 | stage/innodb/alter table (read PK and internal sort) |          77034 |         330519 | ALTER TABLE test.test ALGORITHM=INPLACE, ADD testA VARCHAR(20) NOT NULL DEFAULT 'testA' |
      +-----------+------------------------------------------------------+----------------+----------------+-----------------------------------------------------------------------------------------+
      1 row in set (0.00 sec)
    • performance_schema.metadata_locks テーブルから、クラスタ内の MDL に関する情報を表示します。 サンプル文:

      SELECT * FROM performance_schema.metadata_locks;

      サンプル結果:

      +-------------+--------------------+------------------+-------------+-----------------------+---------------------+---------------+-------------+------------------------+-----------------+----------------+
      | OBJECT_TYPE | OBJECT_SCHEMA      | OBJECT_NAME      | COLUMN_NAME | OBJECT_INSTANCE_BEGIN | LOCK_TYPE           | LOCK_DURATION | LOCK_STATUS | SOURCE                 | OWNER_THREAD_ID | OWNER_EVENT_ID |
      +-------------+--------------------+------------------+-------------+-----------------------+---------------------+---------------+-------------+------------------------+-----------------+----------------+
      | GLOBAL      | NULL               | NULL             | NULL        |       139949462878336 | INTENTION_EXCLUSIVE | STATEMENT     | GRANTED     | sql_base.cc:3103       |         3055785 |              1 |
      | TABLE       | test               | test             | NULL        |       139931318980224 | SHARED_WRITE        | TRANSACTION   | GRANTED     | sql_parse.cc:6479      |         3055785 |              1 |
      | COMMIT      | NULL               | NULL             | NULL        |       139931318980480 | INTENTION_EXCLUSIVE | EXPLICIT      | GRANTED     | handler.cc:1669        |         3055785 |              1 |
      | TABLE       | performance_schema | metadata_locks   | NULL        |       139934227366144 | SHARED_READ         | TRANSACTION   | GRANTED     | sql_parse.cc:6479      |         3057612 |              1 |
      | GLOBAL      | NULL               | NULL             | NULL        |       139934216849664 | INTENTION_EXCLUSIVE | STATEMENT     | GRANTED     | sql_base.cc:5519       |         3057989 |             13 |
      | SCHEMA      | test               | NULL             | NULL        |       139934216849408 | INTENTION_EXCLUSIVE | TRANSACTION   | GRANTED     | sql_base.cc:5506       |         3057989 |             13 |
      | TABLE       | test               | test             | NULL        |       139934216848640 | SHARED_UPGRADABLE   | TRANSACTION   | GRANTED     | sql_parse.cc:6479      |         3057989 |             13 |
      | BACKUP LOCK | NULL               | NULL             | NULL        |       139934216849280 | INTENTION_EXCLUSIVE | TRANSACTION   | GRANTED     | sql_base.cc:5526       |         3057989 |             13 |
      | TABLESPACE  | NULL               | test/test        | NULL        |       139934216848384 | INTENTION_EXCLUSIVE | TRANSACTION   | GRANTED     | lock.cc:815            |         3057989 |             13 |
      | TABLE       | test               | #sql-17d9_2ea89a | NULL        |       139934216848896 | EXCLUSIVE           | STATEMENT     | GRANTED     | sql_table.cc:15054     |         3057989 |             13 |
      | GLOBAL      | NULL               | NULL             | NULL        |       139934216850176 | INTENTION_EXCLUSIVE | TRANSACTION   | GRANTED     | dictionary_impl.cc:416 |         3057989 |             13 |
      | TABLESPACE  | NULL               | test/test        | NULL        |       139934216849920 | EXCLUSIVE           | TRANSACTION   | GRANTED     | dictionary_impl.cc:397 |         3057989 |             13 |
      +-------------+--------------------+------------------+-------------+-----------------------+---------------------+---------------+-------------+------------------------+-----------------+----------------+
      12 rows in set (0.00 sec)

      performance_schema.threads テーブルから、OWNER_THREAD_ID の値に基づいて、MDL を保持しているスレッドに関する情報を表示します。

      SELECT * FROM performance_schema.threads WHERE THREAD_ID = "OWNER_THREAD_ID in performance_schema.metadata_locks table ";

ベストプラクティス

  • テーブルメタデータロックの待機中

    ほとんどの場合、DDL 操作は MDL の取得に失敗したためにブロックされます。 この場合、DDL 操作は テーブルメタデータロックの待機中 状態になります。 metadata_lock テーブルをクエリして、DDL 操作のブロックの理由をすばやく特定できます。

    サンプルコマンド:

    SHOW PROCESSLIST 文を実行して、ALTER TABLE t1 ADD COLUMN d VARCHAR(10), ALGORITHM = INPLACE 文の実行ステータスをクエリします。 サンプル結果:

    /*force_node='pi-bp10k7631d6k3****'*/ SHOW PROCESSLIST;
    +-----------+-----------------+-----------------------+--------------------+----------------+---------+---------------------------------+-------------------------------------------------------------+
    | Id        | User            | Host                  | db                 | Command        | Time    | State                           | Info                                                        |
    +-----------+-----------------+-----------------------+--------------------+----------------+---------+---------------------------------+-------------------------------------------------------------+
    |        98 | event_scheduler | localhost             | NULL               | Daemon         | 1306586 | Waiting on empty queue          | NULL                                                        |
    |       109 | replicator      | 11.111.XX.XX:62549    | NULL               | Polar Log Dump |       1 | Reading log from innodb         | NULL                                                        |
    |       113 | replicator      | 11.111.XX.XX:62560    | NULL               | Polar Log Ack  |       1 | Receiving from client           | NULL                                                        |
    |       133 | replicator      | 10.13.64.70:42712     | NULL               | Polar Log Dump |       1 | Reading log from innodb         | NULL                                                        |
    |       138 | replicator      | 10.13.64.70:42723     | NULL               | Polar Log Ack  |       0 | Receiving from client           | NULL                                                        |
    |       369 | aurora          | 10.111.211.209:33334  | NULL               | Sleep          |       0 |                                 | NULL                                                        |
    |       370 | aurora          | 10.111.211.209:33336  | NULL               | RDS Push LSN   | 1306413 | starting                        | NULL                                                        |
    |       372 | aurora          | 10.111.204.224:37010  | NULL               | Sleep          |       0 |                                 | NULL                                                        |
    |       373 | aurora          | 10.111.204.224:37019  | NULL               | RDS Push LSN   | 1306413 | starting                        | NULL                                                        |
    |   3064011 | root            | 127.0.0.1:59703       | NULL               | Sleep          |     716 |                                 | NULL                                                        |
    |   3064013 | root            | 127.0.0.1:59710       | NULL               | Sleep          |      25 |                                 | NULL                                                        |
    |   3064015 | root            | 127.0.0.1:59713       | NULL               | Sleep          |      55 |                                 | NULL                                                        |
    |   3064018 | root            | 127.0.0.1:59716       | NULL               | Sleep          |       1 |                                 | NULL                                                        |
    |   3067041 | zyg_root        | 172.17.XX.XX:48594    | test               | Query          |      22 | Waiting for table metadata lock | alter table t1 add column d varchar(10),algorithm = inplace |
    |   3067443 | zyg_root        | 172.17.XX.XX:48602    | test               | Sleep          |      27 |                                 | NULL                                                        |
    |   3069716 | aurora          | 100.104.XX.XX:33017   | information_schema | Sleep          |      30 |                                 | NULL                                                        |
    |   3069859 | aurora          | 100.104.XX.XX:41872   | information_schema | Sleep          |      30 |                                 | NULL                                                        |
    |   3069925 | aurora          | 10.111.204.224:20916  | NULL               | Sleep          |       2 |                                 | NULL                                                        |
    |   3069932 | aurora          | 10.111.211.209:51263  | NULL               | Sleep          |       2 |                                 | NULL                                                        |
    | 270526156 | zyg_root        | 172.17.28.253:46272   | test               | Query          |       0 | starting                        | /*force_node='pi-bp10k7631d6k3****'*/ show processlist      |
    +-----------+-----------------+-----------------------+--------------------+----------------+---------+---------------------------------+-------------------------------------------------------------+
    20 rows in set (0.00 sec)

    結果は、DDL 操作が テーブルメタデータロックの待機中 状態であることを示しています。

    performance_schema.metadata_locks テーブルをクエリして、DDL 操作の MDL ステータスを表示します。 サンプル結果:

    /*force_node='pi-bp10k7631d6k3****'*/ SELECT * FROM performance_schema.metadata_locks;
    +-------------+--------------------+------------------+-------------+-----------------------+---------------------+---------------+-------------+--------------------+-----------------+----------------+
    | OBJECT_TYPE | OBJECT_SCHEMA      | OBJECT_NAME      | COLUMN_NAME | OBJECT_INSTANCE_BEGIN | LOCK_TYPE           | LOCK_DURATION | LOCK_STATUS | SOURCE             | OWNER_THREAD_ID | OWNER_EVENT_ID |
    +-------------+--------------------+------------------+-------------+-----------------------+---------------------+---------------+-------------+--------------------+-----------------+----------------+
    | TABLE       | performance_schema | metadata_locks   | NULL        |       139742994307712 | SHARED_READ         | TRANSACTION   | GRANTED     | sql_parse.cc:7688  |         3810041 |              1 |
    | TABLE       | test               | t1               | NULL        |       139742992122240 | SHARED_READ         | TRANSACTION   | GRANTED     | sql_parse.cc:7688  |         3810574 |              1 |
    | GLOBAL      | NULL               | NULL             | NULL        |       139742992172544 | INTENTION_EXCLUSIVE | STATEMENT     | GRANTED     | sql_base.cc:5637   |         3810086 |              3 |
    | SCHEMA      | test               | NULL             | NULL        |       139742993150592 | INTENTION_EXCLUSIVE | TRANSACTION   | GRANTED     | sql_base.cc:5624   |         3810086 |              3 |
    | TABLE       | test               | t1               | NULL        |       139742993150848 | SHARED_UPGRADABLE   | TRANSACTION   | GRANTED     | sql_parse.cc:7688  |         3810086 |              3 |
    | BACKUP LOCK | NULL               | NULL             | NULL        |       139742993844096 | INTENTION_EXCLUSIVE | TRANSACTION   | GRANTED     | sql_base.cc:5644   |         3810086 |              3 |
    | TABLESPACE  | NULL               | test/t1          | NULL        |       139742991805696 | INTENTION_EXCLUSIVE | TRANSACTION   | GRANTED     | lock.cc:815        |         3810086 |              3 |
    | TABLE       | test               | #sql-1b34_2ecca1 | NULL        |       139742992091136 | EXCLUSIVE           | STATEMENT     | GRANTED     | sql_table.cc:15532 |         3810086 |              3 |
    | TABLE       | test               | t1               | NULL        |       140266021234688 | EXCLUSIVE           | TRANSACTION   | PENDING     | mdl.cc:4124        |         3810086 |              3 |
    +-------------+--------------------+------------------+-------------+-----------------------+---------------------+---------------+-------------+--------------------+-----------------+----------------+
    9 rows in set (0.00 sec)

    結果は、3810574 スレッドが SHARED_READ ロックを test/t1 テーブルに保持していることを示しています。 その結果、3810086 スレッドは EXCLUSIVE ロックを取得できません。 performance_schema.threads テーブルをクエリして、スレッドの詳細を表示します。 サンプル結果:

    /*force_node='pi-bp10k7631d6k3****'*/ SELECT * FROM performance_schema.threads WHERE THREAD_ID IN (3810086,3810574)\G
    *************************** 1. row ***************************
              THREAD_ID: 3810086
                   NAME: thread/sql/one_connection
                   TYPE: FOREGROUND
         PROCESSLIST_ID: 3067041
       PROCESSLIST_USER: zyg_root
       PROCESSLIST_HOST: 172.17.28.253
         PROCESSLIST_DB: test
    PROCESSLIST_COMMAND: Query
       PROCESSLIST_TIME: 41
      PROCESSLIST_STATE: Waiting for table metadata lock
       PROCESSLIST_INFO: alter table t1 add column d varchar(10),algorithm = inplace
       PARENT_THREAD_ID: NULL
                   ROLE: NULL
           INSTRUMENTED: YES
                HISTORY: YES
        CONNECTION_TYPE: TCP/IP
           THREAD_OS_ID: 64852
         RESOURCE_GROUP: NULL
    *************************** 2. row ***************************
              THREAD_ID: 3810574
                   NAME: thread/sql/one_connection
                   TYPE: FOREGROUND
         PROCESSLIST_ID: 3067443
       PROCESSLIST_USER: zyg_root
       PROCESSLIST_HOST: 172.17.28.253
         PROCESSLIST_DB: test
    PROCESSLIST_COMMAND: Sleep
       PROCESSLIST_TIME: 46
      PROCESSLIST_STATE: NULL
       PROCESSLIST_INFO: NULL
       PARENT_THREAD_ID: NULL
                   ROLE: NULL
           INSTRUMENTED: YES
                HISTORY: YES
        CONNECTION_TYPE: TCP/IP
           THREAD_OS_ID: 65845
         RESOURCE_GROUP: NULL
    2 rows in set (0.01 sec)

    結果は、ブロックされた DDL 操作が 3810086 スレッドで実行され、低速クエリが 3810574 スレッドで実行されていることを示しています。 3810574 スレッドがロックを保持しています。 その結果、alter table t1 add column d varchar(10),algorithm = inplace 文は MDL の取得に失敗し、ブロックされます。 文がコミットされるまで待機するか、KILL processlist_id 文を使用して文を終了します。 次に、ビジネス要件に基づいて ALTER TABLE t1 ADD COLUMN d VARCHAR(10), ALGORITHM = INPLACE 文を再実行します。

  • レプリカとの同期を待機しています

    PolarDB はクラスタアーキテクチャを使用します。 プライマリノードで DDL 操作を実行する場合、すべての読み取り専用ノードが対応する MDL を解放するまで待機する必要があります。 SHOW PROCESSLIST 文の出力で DDL 操作が レプリカとの同期を待機しています 状態の場合、読み取り専用ノードが対応する MDL を保持しています。 前述の情報に基づいて、MDL を保持している読み取り専用ノードのスレッドをすばやく特定できます。

    サンプルコマンド:

    クラスタのプライマリノードで SHOW PROCESSLIST 文を実行して、ALTER TABLE t1 ADD COLUMN d VARCHAR(10), ALGORITHM = INPLACE 文の実行ステータスをクエリします。 サンプル結果:

    /*force_node='pi-bp10k7631d6k3****'*/ SHOW PROCESSLIST;
    +-----------+-----------------+-----------------------+--------------------+----------------+---------+--------------------------------+-------------------------------------------------------------+
    | Id        | User            | Host                  | db                 | Command        | Time    | State                          | Info                                                        |
    +-----------+-----------------+-----------------------+--------------------+----------------+---------+--------------------------------+-------------------------------------------------------------+
    |        98 | event_scheduler | localhost             | NULL               | Daemon         | 1307512 | Waiting on empty queue         | NULL                                                        |
    (snip)
    | 270530026 | zyg_root        | 172.17.28.253:46390   | test               | Query          |       0 | starting                       | /*force_node='pi-bp10k7631d6k3****'*/ show processlist      |
    +-----------+-----------------+-----------------------+--------------------+----------------+---------+--------------------------------+-------------------------------------------------------------+
    21 rows in set (0.00 sec)

    結果は、DDL 操作が レプリカとの同期を待機しています 状態であることを示しています。

    ヒントを使用して、performance_schema.metadata_locks テーブルから特定の読み取り専用ノードの MDL のステータスをクエリします。 サンプル結果:

    /*force_node='pi-bp186ko4o21wl****'*/ SELECT * FROM performance_schema.metadata_locks;
    +-------------+--------------------+----------------+-------------+-----------------------+---------------------+---------------+-------------+--------------------+-----------------+----------------+
    | OBJECT_TYPE | OBJECT_SCHEMA      | OBJECT_NAME    | COLUMN_NAME | OBJECT_INSTANCE_BEGIN | LOCK_TYPE           | LOCK_DURATION | LOCK_STATUS | SOURCE             | OWNER_THREAD_ID | OWNER_EVENT_ID |
    +-------------+--------------------+----------------+-------------+-----------------------+---------------------+---------------+-------------+--------------------+-----------------+----------------+
    (snip)
    | TABLE       | performance_schema | metadata_locks | NULL        |       139394296038784 | SHARED_READ         | TRANSACTION   | GRANTED     | sql_parse.cc:7688  |         3518506 |              1 |
    +-------------+--------------------+----------------+-------------+-----------------------+---------------------+---------------+-------------+--------------------+-----------------+----------------+
    8 rows in set (0.00 sec)

    結果は、読み取り専用ノードの 3513381351927735192793519278、および 3519276 スレッドが SHARED_READ ロックを test/t1 テーブルに保持していることを示しています。 performance_schema.threads テーブルからスレッドの詳細情報をクエリします。 サンプル結果:

    /*force_node='pi-bp186ko4o21wl****'*/SELECT * FROM performance_schema.threads WHERE THREAD_ID IN (3519278,3513381,3519279,3519276,3519277)\G
    (snip)
         RESOURCE_GROUP: NULL
    5 rows in set (0.00 sec)

    読み取り専用ノードのクエリ操作はロックを長時間保持し、解放しません。 パラレルクエリ機能が有効になっているため、複数の parallel_worker スレッドが同時に MDL を保持しています。 文がコミットされるまで待機するか、KILL processlist_id 文を使用してプロセスを終了します。 次に、ビジネス要件に基づいて ALTER TABLE t1 ADD COLUMN d VARCHAR(10), ALGORITHM = INPLACE 文を再実行します。

Contact us

If you have any questions about DDL operations, contact us.