Documentation Home
MySQL 8.0 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 36.1Mb
PDF (A4) - 36.2Mb


このページは機械翻訳したものです。

27.12.19.10 スレッドテーブル

threads テーブルは各サーバースレッドの行を格納します。 各行にはスレッドに関する情報が含まれ、監視および履歴イベントロギングが有効かどうかが示されます:

mysql> SELECT * FROM performance_schema.threads\G*************************** 1. row ***************************          THREAD_ID: 1               NAME: thread/sql/main               TYPE: BACKGROUND     PROCESSLIST_ID: NULL   PROCESSLIST_USER: NULL   PROCESSLIST_HOST: NULL     PROCESSLIST_DB: NULLPROCESSLIST_COMMAND: NULL   PROCESSLIST_TIME: 80284  PROCESSLIST_STATE: NULL   PROCESSLIST_INFO: NULL   PARENT_THREAD_ID: NULL               ROLE: NULL       INSTRUMENTED: YES            HISTORY: YES    CONNECTION_TYPE: NULL       THREAD_OS_ID: 489803     RESOURCE_GROUP: SYS_default...*************************** 4. row ***************************          THREAD_ID: 51               NAME: thread/sql/one_connection               TYPE: FOREGROUND     PROCESSLIST_ID: 34   PROCESSLIST_USER: isabella   PROCESSLIST_HOST: localhost     PROCESSLIST_DB: performance_schemaPROCESSLIST_COMMAND: Query   PROCESSLIST_TIME: 0  PROCESSLIST_STATE: Sending data   PROCESSLIST_INFO: SELECT * FROM performance_schema.threads   PARENT_THREAD_ID: 1               ROLE: NULL       INSTRUMENTED: YES            HISTORY: YES    CONNECTION_TYPE: SSL/TLS       THREAD_OS_ID: 755399     RESOURCE_GROUP: USR_default...

パフォーマンススキーマが初期化されると、存在するスレッドに基づいてthreads テーブルが生成されます。 その後、サーバーがスレッドを作成するたびに新しい行が追加されます。

新しいスレッドのINSTRUMENTED およびHISTORY カラムの値は、setup_actors テーブルの内容によって決まります。setup_actors テーブルを使用してこれらのカラムを制御する方法の詳細は、セクション27.4.6「スレッドによる事前フィルタリング」 を参照してください。

スレッドの終了時に、threads テーブルからの行の削除が行われます。 クライアントセッションに関連付けられたスレッドでは、セッションの終了時に削除が行われます。 クライアントで自動再接続が有効になっていて、切断後にセッションが再接続された場合、セッションは異なるPROCESSLIST_ID 値を持つthreads テーブルの新しい行に関連付けられます。 新しいスレッドのINSTRUMENTED およびHISTORY の初期値は、元のスレッドの値と異なる場合があります: 一方、setup_actors テーブルは変更された可能性があり、行の初期化後に元のスレッドのINSTRUMENTED またはHISTORY の値が変更された場合、変更は新しいスレッドに引き継がれません。

スレッドモニタリング (スレッドによって実行されるイベントがインストゥルメントされているかどうか) および履歴イベントロギングを有効または無効にできます。 新しいフォアグラウンドスレッドのINSTRUMENTED およびHISTORY の初期値を制御するには、setup_actors テーブルを使用します。 既存のスレッドのこれらの側面を制御するには、threads テーブルの行のINSTRUMENTED およびHISTORY カラムを設定します。 (スレッドモニタリングおよび履歴イベントロギングが発生する条件の詳細は、INSTRUMENTED およびHISTORY のカラムの説明を参照してください。)

接頭辞がPROCESSLIST_の名前と他のプロセス情報ソースとのthreads テーブルのカラムの比較は、プロセス情報のソース を参照してください。

重要

threads テーブル以外のスレッド情報ソースの場合、他のユーザーのスレッドに関する情報は、現在のユーザーがPROCESS 権限を持っている場合にのみ表示されます。 これはthreads テーブルには当てはまりません。テーブルのSELECT 権限を持つすべてのユーザーに、すべての行が表示されます。threads テーブルにアクセスして他のユーザーのスレッドを表示できないようにするユーザーには、そのユーザーに対するSELECT 権限を付与しないでください。

threads テーブルにはこれらのカラムがあります。

  • THREAD_ID

    一意のスレッド識別子。

  • NAME

    サーバーのスレッドインストゥルメンテーションコードに関連付けられている名前。 たとえば、thread/sql/one_connection はユーザー接続の処理を担当するコード内のスレッド関数に対応し、thread/sql/main はサーバーのmain() 関数を表します。

  • TYPE

    FOREGROUND またはBACKGROUND のスレッドの種類。 ユーザー接続スレッドはフォアグラウンドスレッドです。 内部サーバーアクティビティーに関連付けられているスレッドはバックグラウンドスレッドです。 たとえば、内部InnoDB スレッド、レプリカに情報を送信するbinlog dump スレッド、レプリケーション I/O スレッドおよび SQL スレッドなどです。

  • PROCESSLIST_ID

    フォアグラウンドスレッド (ユーザー接続に関連付けられている) の場合、これは接続識別子です。 これは、INFORMATION_SCHEMAPROCESSLIST テーブルのID カラムに表示される値と同じで、SHOW PROCESSLIST 出力のId カラムに表示され、スレッド内のCONNECTION_ID() 関数によって返されます。

    バックグラウンドスレッド (ユーザー接続に関連付けられていない) の場合、PROCESSLIST_IDNULL であるため、値は一意ではありません。

  • PROCESSLIST_USER

    フォアグラウンドスレッドに関連付けられているユーザー、バックグラウンドスレッドの場合はNULL

  • PROCESSLIST_HOST

    フォアグラウンドスレッドに関連付けられているクライアントのホスト名、バックグラウンドスレッドの場合はNULL

    INFORMATION_SCHEMAPROCESSLIST テーブルのHOST カラムまたはSHOW PROCESSLIST 出力のHost カラムとは異なり、PROCESSLIST_HOST カラムには TCP/IP 接続のポート番号は含まれません。 パフォーマンススキーマからこの情報を取得するには、ソケットインストゥルメンテーションを有効にし (デフォルトでは有効になっていません)、socket_instances テーブルを調べます:

    mysql> SELECT NAME, ENABLED, TIMED       FROM performance_schema.setup_instruments       WHERE NAME LIKE 'wait/io/socket%';+----------------------------------------+---------+-------+| NAME                                   | ENABLED | TIMED |+----------------------------------------+---------+-------+| wait/io/socket/sql/server_tcpip_socket | NO      | NO    || wait/io/socket/sql/server_unix_socket  | NO      | NO    || wait/io/socket/sql/client_connection   | NO      | NO    |+----------------------------------------+---------+-------+3 rows in set (0.01 sec)mysql> UPDATE performance_schema.setup_instruments       SET ENABLED='YES'       WHERE NAME LIKE 'wait/io/socket%';Query OK, 3 rows affected (0.00 sec)Rows matched: 3  Changed: 3  Warnings: 0mysql> SELECT * FROM performance_schema.socket_instances\G*************************** 1. row ***************************           EVENT_NAME: wait/io/socket/sql/client_connectionOBJECT_INSTANCE_BEGIN: 140612577298432            THREAD_ID: 31            SOCKET_ID: 53                   IP: ::ffff:127.0.0.1                 PORT: 55642                STATE: ACTIVE...
  • PROCESSLIST_DB

    スレッドのデフォルトデータベース。選択されていない場合はNULL

  • PROCESSLIST_COMMAND

    フォアグラウンドスレッドの場合、スレッドがクライアントのかわりに実行しているコマンドのタイプ、またはセッションがアイドル状態の場合はSleep。 スレッドコマンドの説明については、セクション8.14「サーバースレッド (プロセス) 情報の確認」を参照してください。 このカラムの値は、クライアント/サーバープロトコルのCOM_xxx コマンドとCom_xxx ステータス変数に対応します。セクション5.1.10「サーバーステータス変数」を参照してください

    バックグラウンドスレッドはクライアントのかわりにコマンドを実行しないため、このカラムはNULL である可能性があります。

  • PROCESSLIST_TIME

    スレッドが現在の状態になってからの秒数。 レプリカ SQL スレッドの場合、この値は、最後にレプリケートされたイベントのタイムスタンプとレプリカホストのリアルタイムの間の秒数です。セクション17.2.3「レプリケーションスレッド」を参照してください。

  • PROCESSLIST_STATE

    スレッドが行なっていることを示すアクション、イベント、または状態。PROCESSLIST_STATE 値の説明については、セクション8.14「サーバースレッド (プロセス) 情報の確認」を参照してください。 値がNULL の場合、スレッドはアイドルクライアントセッションに対応しているか、スレッドが実行している作業がステージでインストゥルメントされていません。

    ほとんどの状態がきわめてすばやい操作に対応します。 スレッドが何秒間も特定の状態にとどまっている場合は、問題が発生している可能性があり、調査が必要です。

  • PROCESSLIST_INFO

    スレッドが実行しているステートメント。ステートメントを実行していない場合はNULL。 このステートメントは、サーバーに送信されるステートメント、またはこのステートメントがほかのステートメントを実行する場合は、もっとも内側のステートメントである可能性があります。 たとえば、CALL ステートメントがSELECT ステートメントを実行しているストアドプロシージャーを実行する場合、PROCESSLIST_INFO 値にはSELECT ステートメントが示されます。

  • PARENT_THREAD_ID

    このスレッドがサブスレッド (別のスレッドによって生成される) である場合、これは生成されるスレッドのTHREAD_ID 値です。

  • ROLE

    使用されません。

  • INSTRUMENTED

    スレッドによって実行されるイベントがインストゥルメントされるかどうか。 値はYES またはNO です。

    • フォアグラウンドスレッドでは、初期INSTRUMENTED 値は、スレッドに関連付けられているユーザーアカウントがsetup_actors テーブル内の任意の行に一致するかどうかによって決定されます。 照合はPROCESSLIST_USER およびPROCESSLIST_HOST カラムの値に基づきます。

      スレッドがサブスレッドを生成すると、そのサブスレッドに対して作成されたthreads テーブルの行に対して照合が再度行われます。

    • バックグラウンドスレッドの場合、INSTRUMENTED はデフォルトでYES です。バックグラウンドスレッドに関連付けられたユーザーはないため、setup_actors は参照されません。

    • どのスレッドでも、スレッドの有効期間の間にそのINSTRUMENTED 値が変更されることがあります。

    スレッドによって実行されるイベントのモニタリングが行われる場合、これらのことが当てはまる必要があります。

    • setup_consumers テーブル内のthread_instrumentation コンシューマはYES である必要があります。

    • threads.INSTRUMENTED カラムはYES である必要があります。

    • 監視は、setup_instruments テーブルでENABLED カラムがYES に設定されているインストゥルメントから生成されたスレッドイベントに対してのみ行われます。

  • HISTORY

    スレッドの履歴イベントをログに記録するかどうか。 値はYES またはNO です。

    • フォアグラウンドスレッドの場合、初期HISTORY 値は、スレッドに関連付けられたユーザーアカウントがsetup_actors テーブルのいずれかの行と一致するかどうかによって決まります。 照合はPROCESSLIST_USER およびPROCESSLIST_HOST カラムの値に基づきます。

      スレッドがサブスレッドを生成すると、そのサブスレッドに対して作成されたthreads テーブルの行に対して照合が再度行われます。

    • バックグラウンドスレッドの場合、HISTORY はデフォルトでYES です。バックグラウンドスレッドに関連付けられたユーザーがないため、setup_actors は参照されません。

    • どのスレッドでも、そのHISTORY 値はスレッドの存続期間中に変更できます。

    スレッドの履歴イベントロギングを実行するには、次のことが当てはまる必要があります:

    • setup_consumers テーブルの適切な履歴関連コンシューマを有効にする必要があります。 たとえば、events_waits_history およびevents_waits_history_long テーブルの待機イベントロギングでは、対応するevents_waits_history およびevents_waits_history_long コンシューマがYES である必要があります。

    • threads.HISTORY カラムはYES である必要があります。

    • ロギングは、setup_instruments テーブルでENABLED カラムがYES に設定されているインストゥルメントから生成されたスレッドイベントに対してのみ発生します。

  • CONNECTION_TYPE

    接続の確立に使用されるプロトコル、またはバックグラウンドスレッド用のNULL。 許可される値は、TCP/IP (暗号化なしで確立された TCP/IP 接続)、SSL/TLS (暗号化で確立された TCP/IP 接続)、Socket (Unix ソケットファイル接続)、Named Pipe (Windows 名前付きパイプ接続) およびShared Memory (Windows 共有メモリー接続) です。

  • THREAD_OS_ID

    基礎となるオペレーティングシステムで定義されているスレッドまたはタスク識別子 (存在する場合):

    • MySQL スレッドが存続期間中に同じオペレーティングシステムスレッドに関連付けられている場合、THREAD_OS_ID にはオペレーティングシステムスレッド ID が含まれます。

    • MySQL スレッドが存続期間中に同じオペレーティングシステムスレッドに関連付けられていない場合、THREAD_OS_ID にはNULL が含まれます。 これは、スレッドプールプラグインが使用されている場合のユーザーセッションに一般的です (セクション5.6.3「MySQL Enterprise Thread Pool」 を参照)。

    Windows の場合、THREAD_OS_ID はプロセスエクスプローラ (https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx) に表示されるスレッド ID に対応します。

    Linux の場合、THREAD_OS_IDgettid() 関数の値に対応します。 この値は、たとえば、perf またはps -L コマンドを使用するか、proc ファイルシステム (/proc/[pid]/task/[tid]) で公開されます。 詳細は、perf-stat(1)ps(1)、およびproc(5) のマニュアルページを参照してください。

  • RESOURCE_GROUP

    リソースグループラベル。 リソースグループが現在のプラットフォームまたはサーバー構成でサポートされていない場合、この値はNULL です (リソースグループの制限 を参照)。

threads テーブルには次のインデックスがあります:

  • 主キー (THREAD_ID)

  • (NAME) のインデックス

  • (PROCESSLIST_ID) のインデックス

  • (PROCESSLIST_USERPROCESSLIST_HOST) のインデックス

  • (PROCESSLIST_HOST) のインデックス

  • (THREAD_OS_ID) のインデックス

  • (RESOURCE_GROUP) のインデックス

TRUNCATE TABLE は、threads テーブルに対して許可されていません。