MySQL プロセスリストには、サーバー内で実行されているスレッドのセットによって現在実行されている操作が示されます。 processlist
テーブルは、プロセス情報のソースです。 このテーブルと他のソースの比較は、プロセス情報のソース を参照してください。
processlist
テーブルは直接クエリーすることができます。 PROCESS
権限を持っている場合は、他のユーザーに属するスレッドも含めて、すべてのスレッドを表示できます。 それ以外の場合 (PROCESS
権限なし)、非匿名ユーザーは自分のスレッドに関する情報にはアクセスできますが、他のユーザーのスレッドにはアクセスできず、匿名ユーザーはスレッド情報にアクセスできません。
performance_schema_show_processlist
システム変数が有効になっている場合、processlist
テーブルは SHOW PROCESSLIST
ステートメントの基礎となる代替実装の基礎としても機能します。 詳細は、このセクションの後半のを参照してください。
processlist
テーブルには、各サーバープロセスの行が含まれます:
mysql> SELECT * FROM performance_schema.processlist\G
*************************** 1. row ***************************
ID: 5
USER: event_scheduler
HOST: localhost
DB: NULL
COMMAND: Daemon
TIME: 137
STATE: Waiting on empty queue
INFO: NULL
*************************** 2. row ***************************
ID: 9
USER: me
HOST: localhost:58812
DB: NULL
COMMAND: Sleep
TIME: 95
STATE:
INFO: NULL
*************************** 3. row ***************************
ID: 10
USER: me
HOST: localhost:58834
DB: test
COMMAND: Query
TIME: 0
STATE: executing
INFO: SELECT * FROM performance_schema.processlist
...
processlist
テーブルには、次のカラムがあります:
-
ID
接続識別子。 これは、
SHOW PROCESSLIST
ステートメントのId
カラムに表示される値と同じで、パフォーマンススキーマthreads
テーブルのPROCESSLIST_ID
カラムに表示され、スレッド内のCONNECTION_ID()
関数によって返されます。 -
USER
このステートメントを発行した MySQL ユーザー。
system user
の値は、遅延行ハンドラスレッド、レプリカホストで使用される I/O または SQL スレッドなど、タスクを内部的に処理するためにサーバーによって起動される非クライアントスレッドを指します。system user
の場合、Host
カラムにホストが指定されていません。unauthenticated user
は、クライアント接続に関連付けられたが、クライアントユーザーの認証がまだ行われていないスレッドを参照します。event_scheduler
は、スケジュールされたイベントをモニターするスレッドを指します (セクション25.4「イベントスケジューラの使用」 を参照)。注記system user
のUSER
値は、SYSTEM_USER
権限とは異なります。 前者は内部スレッドを指定します。 後者は、システムユーザーと通常のユーザーアカウントカテゴリを区別します (セクション6.2.11「アカウントカテゴリ」 を参照)。 -
HOST
ステートメントを発行するクライアントのホスト名 (ホストがない
system user
を除く)。 TCP/IP 接続のホスト名は、
形式でレポートされるため、どのクライアントが何を実行しているかを簡単に判別できます。host_name
:client_port
-
DB
スレッドのデフォルトデータベース。選択されていない場合は
NULL
。 -
COMMAND
スレッドがクライアントのかわりに実行しているコマンドのタイプ。セッションがアイドル状態の場合は
Sleep
。 スレッドコマンドの説明については、セクション8.14「サーバースレッド (プロセス) 情報の確認」を参照してください。 このカラムの値は、クライアント/サーバープロトコルのCOM_
コマンドとxxx
Com_
ステータス変数に対応します。 セクション5.1.10「サーバーステータス変数」を参照してくださいxxx
-
TIME
スレッドが現在の状態になってからの秒数。 レプリカ SQL スレッドの場合、この値は、最後にレプリケートされたイベントのタイムスタンプとレプリカホストのリアルタイムの間の秒数です。 セクション17.2.3「レプリケーションスレッド」を参照してください。
-
STATE
スレッドが行なっていることを示すアクション、イベント、または状態。
STATE
の値の詳細は、セクション8.14「サーバースレッド (プロセス) 情報の確認」 を参照してください。ほとんどの状態がきわめてすばやい操作に対応します。 スレッドの状態が何秒間も特定の状態にとどまっている場合は、調査が必要な問題が発生している可能性があります。
-
INFO
スレッドが実行しているステートメント。ステートメントを実行していない場合は
NULL
。 このステートメントは、サーバーに送信されるステートメント、またはこのステートメントがほかのステートメントを実行する場合は、もっとも内側のステートメントである可能性があります。 たとえば、CALL
ステートメントがSELECT
ステートメントを実行しているストアドプロシージャを実行する場合、INFO
値にはSELECT
ステートメントが表示されます。
processlist
テーブルには次のインデックスがあります:
主キー (
ID
)
TRUNCATE TABLE
は、processlist
テーブルに対して許可されていません。
前述のように、performance_schema_show_processlist
システム変数が有効になっている場合、processlist
テーブルは他のプロセス情報ソースの代替実装の基礎となります:
SHOW PROCESSLIST
ステートメント。mysqladmin processlist コマンド (
SHOW PROCESSLIST
ステートメントを使用)。
デフォルトの SHOW PROCESSLIST
実装は、グローバル mutex を保持しながら、スレッドマネージャ内からアクティブスレッド間で繰り返されます。 これは、特にビジー状態のシステムではパフォーマンスに悪影響を及ぼします。 代替の SHOW PROCESSLIST
実装は、パフォーマンススキーマ processlist
テーブルに基づいています。 この実装は、スレッドマネージャーではなくパフォーマンススキーマからアクティブなスレッドデータをクエリーするため、mutex は必要ありません。
MySQL の構成は、次のように processlist
テーブルの内容に影響します:
-
最小限必要な構成:
MySQL サーバーは、スレッドインストゥルメンテーションを有効にして構成および構築する必要があります。 これはデフォルトで true で、
DISABLE_PSI_THREAD
CMake オプションを使用して制御されます。サーバーの起動時にパフォーマンススキーマを有効にする必要があります。 これはデフォルトで true で、
performance_schema
システム変数を使用して制御されます。
この構成が満たされると、
performance_schema_show_processlist
は代替のSHOW PROCESSLIST
実装を有効または無効にします。 最小構成が満たされていない場合、processlist
テーブル (したがってSHOW PROCESSLIST
) はすべてのデータを返すわけではありません。 -
推奨構成:
-
一部のスレッドを無視しないようにするには:
performance_schema_max_thread_instances
システム変数はデフォルトのままにするか、少なくともmax_connections
システム変数と同じ大きさに設定します。performance_schema_max_thread_classes
システム変数はデフォルトのままにします。
一部の
STATE
カラムの値が空にならないようにするには、performance_schema_max_stage_classes
システム変数をデフォルトのままにします。
これらの構成パラメータのデフォルトは
-1
で、パフォーマンススキーマはサーバーの起動時にそれらのサイズを自動設定します。 パラメータが指定どおりに設定されている場合、processlist
テーブル (およびSHOW PROCESSLIST
) は完全なプロセス情報を生成します。 -
前述の構成パラメータは、processlist
テーブルの内容に影響します。 ただし、特定の構成では、processlist
の内容は performance_schema_show_processlist
設定の影響を受けません。
代替プロセスリストの実装は、MySQL クライアント/サーバープロトコルの INFORMATION_SCHEMA
PROCESSLIST
テーブルまたは COM_PROCESS_INFO
コマンドには適用されません。