このページは機械翻訳したものです。
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_コマンドとxxxCom_ステータス変数に対応します。 セクション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_THREADCMake オプションを使用して制御されます。サーバーの起動時にパフォーマンススキーマを有効にする必要があります。 これはデフォルトで 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 コマンドには適用されません。