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

PolarDB:DDLステートメントとメタデータロックの実行ステータスの表示

最終更新日:May 29, 2024

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

前提条件

クラスターはPolarDB for MySQL 8.0.1で、リビジョンバージョンは8.0.1.1.21以降である必要があります。 バージョンの確認方法の詳細については、「エンジンバージョンの照会」をご参照ください。

注意事項

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

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

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

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

手順

説明

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

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

    コンソールでクラスターのloose_polar_performance_schemaパラメーターをONに設定する必要があります。 この機能は、クラスターを再起動すると有効になります。 詳細については、「クラスターとノードパラメーターの設定」をご参照ください。

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

    パラメーター

    説明

    loose_polar_performance_schema

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

    • ON: システムはPolarパフォーマンススキーマ機能を有効にします。

    • OFF: システムはPolarパフォーマンススキーマ機能を無効にします。

    performance_schema_max_thread_インスタンス

    Polarパフォーマンススキーマ機能で監視に使用されるスレッドの最大数。 有効値: -1 ~ 65536 値-1は、ビジネスの変化に適応するためにスレッド数が自動的に調整されることを示します。

    説明

    このパラメータは調整されています。 このパラメーターは変更しないことを推奨します。

    performance_schema_max_metadata_locks

    Polarパフォーマンススキーマ機能で監視に使用されるメタデータロックの最大数。 有効値: -1 ~ 1048576 値が-1の場合、メタデータロックの数がビジネスの変化に適応するように自動的に調整されることを示します。

    説明

    このパラメータは調整されています。 このパラメーターは変更しないことを推奨します。

    クラスターの起動後、次のステートメントを実行して、Polarパフォーマンススキーマ機能を有効にするかどうかを指定できます。

    「polar_performance_schema」のようなバリエーションを表示します。

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

    + -------------------------- + -------
    | Variable_name | 値 |
    + -------------------------- + -------
    | polar_performance_schema | ON |
    + -------------------------- + -------
    1行セット (0.00秒) 
  2. DDLステートメントとメタデータロックの実行ステータスを表示します。

    • DDLステートメントが実行されるプロセスで、次のステートメントを実行してperformance_schema.events_stages_currentテーブルを表示できます。 次に、DDLステートメントのステータスを取得できます。

      SELECT THREAD_ID、EVENT_ID、EVENT_NAME、WORK_COMPLETED、WORK_ESTIMATED、(WORK_COMPLETED/WORK_ESTIMATED)* 100としてPROGRESS FROM performance_schema.events_stages_current;

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

      + ---------- ------------ ------------------------------------------------------ + ---------------- + ---------------- + ---------------- + ---------------- ---------
      | THREAD_ID | EVENT_ID | EVENT_NAME | WORK_COMPLETED | WORK_ESTIMATED | PROGRESS |
      ----------- ---------- ------------------------------------------------------ ---------------- ---------------- ---------- +
      | 3057989 | 13 | stage/innodb/alter table (PKと内部ソートを読む) | 56634 | 330135 | 17.1548 |
      ----------- ---------- ------------------------------------------------------ ---------------- ---------------- ---------- +
      1行セット (0.00秒) 

      performance_schema.threadsおよびinformation_schema.PROCESSLISTテーブルを使用し、次のステートメントを実行して、現在のイベントに対応するSQLステートメントを表示できます。

      SELECT. THREAD_ID, esc.EVENT_NAME, esc.WORK_COMPLETED, esc.WORK_ESTIMATED, pl.INFO FROM performance_schema.events_stages_current esc LEFT JOFT IN performance_schema.s.
      CEID. PROCEID.

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

      + ---------- ------------------------------------------------------ + ---------------- + ---------------- + ----------------------------------------------------------------------------------------- +
      | THREAD_ID | EVENT_NAME | WORK_COMPLETED | WORK_ESTIMATED | 情報 |
      + ---------- + ------------------------------------------------------ + ---------------- + ---------------- + ----------------------------------------------------------------------------------------- +
      | 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行セット (0.00秒) 
    • 次のステートメントを実行して、performance_schema.metadata_locksテーブルを表示できます。 次に、現在のクラスターのメタデータロックステータスを取得できます。

      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 |
      ------------ -------------------- ------------------ ------------ ----------------------- --------------------- -------------------------------------------------- ------------------------ ----------------- ----------------- + ----------------
      | グローバル | NULL | NULL | NULL | 139949462878336 | INTENTION_EXCLUSIVE | ステートメント | GRANTED | sql_base.cc:3103 | 3055785 | 1 |
      | TABLE | test | test | NULL | 139931318980224 | SHARED_WRITE | トランザクション | GRANTED | sql_parse.cc:6479 | 3055785 | 1 |
      | COMMIT | 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 |
      | グローバル | NULL | NULL | NULL | 139934216849664 | INTENTION_EXCLUSIVE | ステートメント | GRANTED | sql_base.cc:5519 | 3057989 | 13 |
      | スキーマ | テスト | NULL | NULL | 139934216849408 | INTENTION_EXCLUSIVE | トランザクション | GRANTED | sql_base.cc:5506 | 3057989 | 13 |
      | TABLE | test | test | NULL | 139934216848640 | SHARED_UPGRADABLE | トランザクション | GRANTED | sql_parse.cc:6479 | 3057989 | 13 |
      | バックアップロック | NULL | NULL | NULL | 139934216849280 | INTENTION_EXCLUSIVE | トランザクション | GRANTED | sql_base.cc:5526 | 3057989 | 13 |
      | TABLESPACE | NULL | test/test | NULL | 139934216848384 | INTENTION_EXCLUSIVE | TRANSACTION | GRANTED | lock.cc:815 | 3057989 | 13 |
      | テーブル | テスト | #sql-17d9_2ea89a | NULL | 139934216848896 | 排他的 | ステートメント | 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 | トランザクション | GRANTED | dictionary_impl.cc:397 | 3057989 | 13 |
      ------------ -------------------- ------------------ ------------ ----------------------- --------------------- -------------------------------------------------- ------------------------ ----------------- ----------------- + ----------------
      セットの12行 (0.00秒) 

      OWNER_THREAD_IDフィールドを使用し、次のステートメントを実行して、performance_schema.threadsテーブルでメタデータロックを保持するスレッドに関する情報を表示できます。

      select * from performance_schema.threads where THREAD_ID = "performance_schema.metadata_locksテーブルのOWNER_THREAD_ID";

ベストプラクティス

  • テーブルメタデータロック待ち

    実際には、DDLブロッキングの一般的な原因は、メタデータロックを取得できないことです。 この場合、DDL文はテーブルメタデータロック待ち状態になります。 metadata_lockテーブルを使用して、DDLブロッキングの原因をすばやく検出できます。

    例:

    SHOW PROCESSLISTステートメントを実行して、ALTER TABLE t1 ADD column d varchar(10),algorithm = inplaceステートメントの実行ステータスを照会します。 同様の結果が返されます。

    /* force_node='pi-bp10k7631d6k3 **** '*/ show processlist;
    + -------- ----------------- + ----------------------- + -------------------- + ---------------- + ---------------- + --------
    | Id | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 |
    + -------- ----------------- + ----------------------- + -------------------- + ---------------- + ---------------- + --------
    | 98 | event_scheduler | localhost | NULL | デーモン | 1306586 | 空のキューで待機中 | NULL |
    | 109 | レプリケーター | 11.111.XX.XX:62549 | NULL | Polarログダンプ | 1 | innodbからのログの読み取り | NULL |
    | 113 | レプリケーター | 11.111.XX.XX:62560 | NULL | Polar Log Ack | 1 | クライアントからの受信 | NULL |
    | 133 | レプリケーター | 10.13.64.70:42712 | NULL | Polarログダンプ | 1 | innodbからのログの読み取り | NULL |
    | 138 | レプリケーター | 10.13.64.70:42723 | NULL | Polar Log Ack | 0 | クライアントからの受信 | NULL |
    | 369 | オーロラ | 10.111.211.209:33334 | NULL | スリープ | 0 | | NULL |
    | 370 | オーロラ | 10.111.211.209:33336 | NULL | RDSプッシュLSN | 1306413 | 開始 | NULL |
    | 372 | オーロラ | 10.111.204.224:37010 | NULL | スリープ | 0 | | NULL |
    | 373 | オーロラ | 10.111.204.224:37019 | NULL | RDSプッシュLSN | 1306413 | 開始 | NULL |
    | 3064011 | ルート | 127.0.0.1:59703 | NULL | スリープ | 716 | | NULL |
    | 3064013 | ルート | 127.0.0.1:59710 | NULL | スリープ | 25 | | NULL |
    | 3064015 | ルート | 127.0.0.1:59713 | NULL | スリープ | 55 | | NULL |
    | 3064018 | ルート | 127.0.0.1:59716 | NULL | スリープ | 1 | | NULL |
    | 3067041 | zyg_root | 172.17.XX.XX:48594 | テスト | クエリ | 22 | テーブルメタデータロック待ち | alter table t1 add column d varchar(10),algorithm = inplace |
    | 3067443 | zyg_root | 172.17.XX.XX:48602 | テスト | スリープ | 27 | | NULL |
    | 3069716 | オーロラ | 100.104.XX.XX:33017 | information_schema | スリープ | 30 | | NULL |
    | 3069859 | オーロラ | 100.104.XX.XX:41872 | information_schema | スリープ | 30 | | NULL |
    | 3069925 | オーロラ | 10.111.204.224:20916 | NULL | スリープ | 2 | | NULL |
    | 3069932 | オーロラ | 10.111.211.209:51263 | NULL | スリープ | 2 | | NULL |
    | 270526156 | zyg_root | 172.17.28.253:46272 | test | クエリ | 0 | 開始 | /* force_node='pi-bp10k7631d6k3 **** '*/ show processlist |
    + -------- ----------------- + ----------------------- + -------------------- + ---------------- + ---------------- + --------
    セットの20行 (0.00秒) 

    DDL文がテーブルメタデータロック待ち状態です。

    performance_schema.metadata_locksテーブルをクエリすることで、DDLステートメントのメタデータロックステータスを表示できます。 同様の結果が返されます。

    /* 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 |
    | グローバル | NULL | NULL | NULL | 139742992172544 | INTENTION_EXCLUSIVE | ステートメント | GRANTED | sql_base.cc:5637 | 3810086 | 3 |
    | スキーマ | テスト | NULL | NULL | 139742993150592 | INTENTION_EXCLUSIVE | トランザクション | GRANTED | sql_base.cc:5624 | 3810086 | 3 |
    | TABLE | test | t1 | NULL | 139742993150848 | SHARED_UPGRADABLE | トランザクション | GRANTED | sql_parse.cc:7688 | 3810086 | 3 |
    | バックアップロック | NULL | NULL | NULL | 139742993844096 | INTENTION_EXCLUSIVE | トランザクション | GRANTED | sql_base.cc:5644 | 3810086 | 3 |
    | TABLESPACE | NULL | test/t1 | NULL | 139742991805696 | INTENTION_EXCLUSIVE | トランザクション | GRANTED | lock.cc:815 | 3810086 | 3 |
    | テーブル | テスト | #sql-1b34_2ecca1 | NULL | 139742992091136 | 排他的 | ステートメント | GRANTED | sql_table.cc:15532 | 3810086 | 3 |
    | TABLE | test | t1 | NULL | 140266021234688 | 排他的 | トランザクション | 保留 | mdl.cc:4124 | 3810086 | 3 |
    ------------ -------------------- ------------------ ------------ ----------------------- --------------------- -------------------------------------------------- -------------------- ----------------- ----------------- + ----------------
    セットの9行 (0.00秒) 

    3810574スレッドは、test/t1テーブルのSHARED_READロックを保持します。 その結果、3810086スレッドはEXCLUSIVEロックを取得できません。 performance_schema.threadsテーブルを使用して、スレッドの詳細を取得できます。 同様の結果が返されます。

    /* force_node='pi-bp10k7631d6k3 **** '*/ select * from performance_schema.threadsここでTHREAD_ID in (3810086,3810574)\G
    *************************** 1。 行 ***************************
              THREAD_ID: 3810086
                   名前: スレッド /sql/one_connection
                   タイプ: FOREGROUND
         PROCESSLIST_ID: 3067041
       PROCESSLIST_USER: zyg_root
       PROCESSLIST_HOST: 172.17.28.253
         PROCESSLIST_DB: テスト
    PROCESSLIST_COMMAND: クエリ
       PROCESSLIST_TIME: 41
      PROCESSLIST_STATE: テーブルメタデータロック待ち
       PROCESSLIST_INFO: テーブルt1を変更して列d varchar(10) を追加、algorithm = inplace
       PARENT_THREAD_ID: NULL
                   ROLE: NULL
           指示: はい
                歴史: はい
        CONNECTION_TYPE: TCP/IP
           THREAD_OS_ID: 64852
         RESOURCE_GROUP: NULL
    *************************** 2. 行 ***************************
              THREAD_ID: 3810574
                   名前: スレッド /sql/one_connection
                   タイプ: FOREGROUND
         PROCESSLIST_ID: 3067443
       PROCESSLIST_USER: zyg_root
       PROCESSLIST_HOST: 172.17.28.253
         PROCESSLIST_DB: テスト
    PROCESSLIST_COMMAND: 睡眠
       PROCESSLIST_TIME: 46
      PROCESSLIST_STATE: NULL
       PROCESSLIST_INFO: NULL
       PARENT_THREAD_ID: NULL
                   ROLE: NULL
           指示: はい
                歴史: はい
        CONNECTION_TYPE: TCP/IP
           THREAD_OS_ID: 65845
         RESOURCE_GROUP: NULL
    セットの2列 (0.01秒) 

    3810086スレッドはブロックされたDDLステートメント用で、3810574スレッドは低速クエリ用です。 3810574スレッドはロックを保持します。 したがって、ALTER TABLE t1 ADD column d varchar(10),algorithm = inplaceステートメントはメタデータロックを取得できず、ブロックされます。 実際のビジネス要件に応じて、トランザクションがコミットされるのを待つか、KILL processlist_idステートメントを実行してトランザクションを終了してから、ALTER TABLE t1 ADD column d varchar(10),algorithm = inplaceステートメントを再度実行できます。

  • レプリカとの同期を待つ

    PolarDBはクラスターアーキテクチャを使用します。 したがって、プライマリノードでDDLステートメントを実行するときは、すべての読み取り専用ノードが対応するメタデータロックを解放するのを待つ必要があります。 SHOW PROCESSLISTステートメントを実行したときに、DDLステートメントがレプリカとの同期待ち状態になっている場合、読み取り専用ノードはテーブルのメタデータロックを保持します。 このセクションで説明するように、読み取り専用ノードのメタデータロックを保持しているスレッドをすばやく照会できます。

    例:

    クラスターのプライマリノードでSHOW PROCESSLISTステートメントを実行して、ALTER TABLE t1 ADD column d varchar(10),algorithm = inplaceステートメントの実行ステータスを照会します。 同様の結果が返されます。

    /* force_node='pi-bp10k7631d6k3 **** '*/ show processlist;
    + -------- ----------------- + ----------------------- + -------------------- + ---------------- + ---------------- + --------
    | Id | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 |
    + -------- ----------------- + ----------------------- + -------------------- + ---------------- + ---------------- + --------
    | 98 | event_scheduler | localhost | NULL | デーモン | 1307512 | 空のキューで待機中 | NULL |
    | 109 | レプリケーター | 11.111.XX.XX:62549 | NULL | Polarログダンプ | 1 | innodbからのログの読み取り | NULL |
    | 113 | レプリケーター | 11.111.XX.XX:62560 | NULL | Polar Log Ack | 1 | クライアントからの受信 | NULL |
    | 133 | レプリケーター | 10.13.64.70:42712 | NULL | Polarログダンプ | 1 | innodbからのログの読み取り | NULL |
    | 138 | レプリケーター | 10.13.64.70:42723 | NULL | Polar Log Ack | 0 | クライアントからの受信 | NULL |
    | 369 | オーロラ | 10.111.211.209:33334 | NULL | スリープ | 0 | | NULL |
    | 370 | オーロラ | 10.111.211.209:33336 | NULL | RDSプッシュLSN | 1307339 | 開始 | NULL |
    | 372 | オーロラ | 10.111.204.224:37010 | NULL | スリープ | 0 | | NULL |
    | 373 | オーロラ | 10.111.204.224:37019 | NULL | RDSプッシュLSN | 1307339 | 開始 | NULL |
    | 3064011 | ルート | 127.0.0.1:59703 | NULL | スリープ | 742 | | NULL |
    | 3064013 | ルート | 127.0.0.1:59710 | NULL | スリープ | 21 | NULL |
    | 3064015 | ルート | 127.0.0.1:59713 | NULL | スリープ | 21 | NULL |
    | 3064018 | ルート | 127.0.0.1:59716 | NULL | スリープ | 1 | | NULL |
    | 3067041 | zyg_root | 172.17.28.253:48594 | テスト | クエリ | 6 | レプリカとの同期を待つ | alter table t1 add column d varchar(10) 、algorithm = inplace |
    | 3067443 | zyg_root | 172.17.28.253:48602 | テスト | スリープ | 751 | | NULL |
    | 3071863 | オーロラ | 100.104.XX.XX:32615 | information_schema | スリープ | 56 | | NULL |
    | 3072000 | オーロラ | 100.104.XX.XX:41585 | information_schema | スリープ | 56 | | NULL |
    | 3072126 | オーロラ | 10.111.204.224:47050 | NULL | スリープ | 2 | | NULL |
    | 3072127 | オーロラ | 10.111.211.209:41026 | NULL | スリープ | 1 | | NULL |
    | 270526156 | zyg_root | 172.17.28.253:46272 | テスト | スリープ | 362 | | NULL |
    | 270530026 | zyg_root | 172.17.28.253:46390 | test | クエリ | 0 | 開始 | /* force_node='pi-bp10k7631d6k3 **** '*/ show processlist |
    + -------- ----------------- + ----------------------- + -------------------- + ---------------- + ---------------- + --------
    セットの21行 (0.00秒) 

    DDLステートメントの状態は、レプリカとの同期待ちです。

    performance_schema.metadata_locksテーブルとヒントを使用して、指定された読み取り専用ノードのメタデータロックのステータスを照会できます。 同様の結果が返されます。

    /* 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 |
    ------------ -------------------- ---------------- ------------ ----------------------- --------------------- -------------------------------------------------- -------------------- ----------------- ----------------- + ----------------
    | TABLE | test | t1 | NULL | 139394298895872 | SHARED_READ | TRANSACTION | GRANTED | sql_parse.cc:7688 | 3513381 | 1 |
    | TABLE | test | t1 | NULL | 139394298602240 | SHARED_READ | TRANSACTION | GRANTED | sql_parse.cc:7688 | 3519277 | 1 |
    | TABLE | test | t1 | NULL | 139917548369664 | SHARED_READ | TRANSACTION | GRANTED | sql_parse.cc:7688 | 3519279 | 1 |
    | TABLE | test | t1 | NULL | 139394296661888 | SHARED_READ | TRANSACTION | GRANTED | sql_parse.cc:7688 | 3519278 | 1 |
    | TABLE | test | t1 | NULL | 139394297595520 | SHARED_READ | TRANSACTION | GRANTED | sql_parse.cc:7688 | 3519276 | 1 |
    | スキーマ | テスト | NULL | NULL | 139464322084864 | INTENTION_EXCLUSIVE | EXPLICIT | GRANTED | sql_table.cc:17404 | 57 | 1 |
    | TABLE | test | t1 | NULL | 139464322084992 | 排他的 | EXPLICIT | PENDING | sql_table.cc:17410 | 57 | 1 |
    | TABLE | performance_schema | metadata_locks | NULL | 139394296038784 | SHARED_READ | TRANSACTION | GRANTED | sql_parse.cc:7688 | 3518506 | 1 |
    ------------ -------------------- ---------------- ------------ ----------------------- --------------------- -------------------------------------------------- -------------------- ----------------- ----------------- + ----------------
    セットの8行 (0.00秒) 

    読み取り専用ノードの3513381351927735192793519278、および3519276のスレッドは、test/t1テーブルのSHARED_READロックを保持します。 performance_schema.threadsテーブルを使用して、これらのスレッドの詳細を取得できます。 同様の結果が返されます。

    /* force_node='pi-bp186ko4o21wl **** '*/ select * from performance_schema.threadsここでTHREAD_ID in (3519278,3513381、3519279,3519276、3519277)\G
    *************************** 1。 行 ***************************
              THREAD_ID: 3513381
                   名前: スレッド /sql/one_connection
                   タイプ: FOREGROUND
         PROCESSLIST_ID: 538961413
       PROCESSLIST_USER: zyg_root
       PROCESSLIST_HOST: 172.17.28.253
         PROCESSLIST_DB: テスト
    PROCESSLIST_COMMAND: 接続
       PROCESSLIST_TIME: 103
      PROCESSLIST_STATE: ユーザースリープ
       PROCESSLIST_INFO: select *,sleep (60) from t1
       PARENT_THREAD_ID: NULL
                   ROLE: NULL
           指示: はい
                歴史: はい
        CONNECTION_TYPE: TCP/IP
           THREAD_OS_ID: 63826
         RESOURCE_GROUP: NULL
    *************************** 2. 行 ***************************
              THREAD_ID: 3519276
                   名前: thread/sql/parallel_worker
                   タイプ: FOREGROUND
         PROCESSLIST_ID: 1855915
       PROCESSLIST_USER: zyg_root
       PROCESSLIST_HOST: 172.17.28.253
         PROCESSLIST_DB: テスト
    PROCESSLIST_COMMAND: 睡眠
       PROCESSLIST_TIME: 103
      PROCESSLIST_STATE: データの送信
       PROCESSLIST_INFO: select *,sleep (60) from t1
       PARENT_THREAD_ID: 3513381
                   ROLE: NULL
           INSTRUMETED: いいえ
                歴史: はい
        CONNECTION_TYPE: NULL
           THREAD_OS_ID: 7117
         RESOURCE_GROUP: NULL
    3. 行 ***************************
              THREAD_ID: 3519277
                   名前: thread/sql/parallel_worker
                   タイプ: FOREGROUND
         PROCESSLIST_ID: 1855917
       PROCESSLIST_USER: zyg_root
       PROCESSLIST_HOST: 172.17.28.253
         PROCESSLIST_DB: テスト
    PROCESSLIST_COMMAND: 睡眠
       PROCESSLIST_TIME: 103
      PROCESSLIST_STATE: データの送信
       PROCESSLIST_INFO: select *,sleep (60) from t1
       PARENT_THREAD_ID: 3513381
                   ROLE: NULL
           INSTRUMETED: いいえ
                歴史: はい
        CONNECTION_TYPE: NULL
           THREAD_OS_ID: 7116
         RESOURCE_GROUP: NULL
    4. 行 ***************************
              THREAD_ID: 3519278
                   名前: thread/sql/parallel_worker
                   タイプ: FOREGROUND
         PROCESSLIST_ID: 1855916
       PROCESSLIST_USER: zyg_root
       PROCESSLIST_HOST: 172.17.28.253
         PROCESSLIST_DB: テスト
    PROCESSLIST_COMMAND: 睡眠
       PROCESSLIST_TIME: 103
      PROCESSLIST_STATE: データの送信
       PROCESSLIST_INFO: select *,sleep (60) from t1
       PARENT_THREAD_ID: 3513381
                   ROLE: NULL
           INSTRUMETED: いいえ
                歴史: はい
        CONNECTION_TYPE: NULL
           THREAD_OS_ID: 7119
         RESOURCE_GROUP: NULL
    *************************** 5。 行 ***************************
              THREAD_ID: 3519279
                   名前: thread/sql/parallel_worker
                   タイプ: FOREGROUND
         PROCESSLIST_ID: 1855918
       PROCESSLIST_USER: zyg_root
       PROCESSLIST_HOST: 172.17.28.253
         PROCESSLIST_DB: テスト
    PROCESSLIST_COMMAND: 睡眠
       PROCESSLIST_TIME: 103
      PROCESSLIST_STATE: データの送信
       PROCESSLIST_INFO: select *,sleep (60) from t1
       PARENT_THREAD_ID: 3513381
                   ROLE: NULL
           INSTRUMETED: いいえ
                歴史: はい
        CONNECTION_TYPE: NULL
           THREAD_OS_ID: 7118
         RESOURCE_GROUP: NULL
    セットの5行 (0.00秒) 

    読み取り専用ノードでのクエリ操作はロックを保持し、ロックを長期間解放しません。 並列クエリ機能が有効になっているため、複数のparallel_workerスレッドが同時にメタデータロックを保持します。 実際のビジネス要件に応じて、トランザクションがコミットされるのを待つか、KILL processlist_idステートメントを実行してトランザクションを終了してから、ALTER TABLE t1 ADD column d varchar(10),algorithm = inplaceステートメントを再度実行できます。