このページは機械翻訳したものです。
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: NULL
PROCESSLIST_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_schema
PROCESSLIST_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()関数を表します。 -
TYPEFOREGROUNDまたはBACKGROUNDのスレッドの種類。 ユーザー接続スレッドはフォアグラウンドスレッドです。 内部サーバーアクティビティーに関連付けられているスレッドはバックグラウンドスレッドです。 たとえば、内部InnoDBスレッド、レプリカに情報を送信する 「binlog dump」 スレッド、レプリケーション I/O スレッドおよび SQL スレッドなどです。 -
PROCESSLIST_IDフォアグラウンドスレッド (ユーザー接続に関連付けられている) の場合、これは接続識別子です。 これは、
INFORMATION_SCHEMAPROCESSLISTテーブルのIDカラムに表示される値と同じで、SHOW PROCESSLIST出力のIdカラムに表示され、スレッド内のCONNECTION_ID()関数によって返されます。バックグラウンドスレッド (ユーザー接続に関連付けられていない) の場合、
PROCESSLIST_IDはNULLであるため、値は一意ではありません。 -
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: 0 mysql> SELECT * FROM performance_schema.socket_instances\G *************************** 1. row *************************** EVENT_NAME: wait/io/socket/sql/client_connection OBJECT_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_コマンドとxxxCom_ステータス変数に対応します。 セクション5.1.10「サーバーステータス変数」を参照してくださいxxxバックグラウンドスレッドはクライアントのかわりにコマンドを実行しないため、このカラムは
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_IDはgettid()関数の値に対応します。 この値は、たとえば、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_USER、PROCESSLIST_HOST) のインデックス(
PROCESSLIST_HOST) のインデックス(
THREAD_OS_ID) のインデックス(
RESOURCE_GROUP) のインデックス
TRUNCATE TABLE は、threads テーブルに対して許可されていません。