SHOW [FULL] PROCESSLIST
MySQL プロセスリストには、サーバー内で実行されているスレッドのセットによって現在実行されている操作が示されます。 SHOW PROCESSLIST
ステートメントは、プロセス情報のソースです。 このステートメントと他のソースの比較については、プロセス情報のソース を参照してください。
MySQL 8.0.22 の時点では、SHOW PROCESSLIST
の代替実装はパフォーマンススキーマ processlist
テーブルに基づいて使用できます。これは、デフォルトの SHOW PROCESSLIST
実装とは異なり、mutex を必要とせず、パフォーマンス特性が向上します。 詳細は、セクション27.12.19.9「processlist テーブル」を参照してください。
PROCESS
権限を持っている場合は、他のユーザーに属するスレッドも含めて、すべてのスレッドを表示できます。 それ以外の場合 (PROCESS
権限なし)、非匿名ユーザーは自分のスレッドに関する情報にはアクセスできますが、他のユーザーのスレッドにはアクセスできず、匿名ユーザーはスレッド情報にアクセスできません。
FULL
キーワードを指定しない場合、SHOW PROCESSLIST
では、Info
フィールドに各ステートメントの最初の 100 文字のみが表示されます。
SHOW PROCESSLIST
ステートメントは、「接続が多すぎます」というエラーメッセージが表示されるために、何が発生しているかを突き止めたい場合に非常に役立ちます。 MySQL では、管理者が常にシステムに接続してチェックできるように、CONNECTION_ADMIN
権限 (または非推奨の SUPER
権限) を持つアカウントで使用される追加接続が予約されています (この権限をすべてのユーザーに付与していないことを前提としています)。
スレッドは、KILL
ステートメントを使用して強制終了できます。 セクション13.7.8.4「KILL ステートメント」を参照してください。
SHOW PROCESSLIST
出力の例:
mysql> SHOW FULL PROCESSLIST\G
*************************** 1. row ***************************
Id: 1
User: system user
Host:
db: NULL
Command: Connect
Time: 1030455
State: Waiting for master to send event
Info: NULL
*************************** 2. row ***************************
Id: 2
User: system user
Host:
db: NULL
Command: Connect
Time: 1004
State: Has read all relay log; waiting for the slave
I/O thread to update it
Info: NULL
*************************** 3. row ***************************
Id: 3112
User: replikator
Host: artemis:2204
db: NULL
Command: Binlog Dump
Time: 2144
State: Has sent all binlog to slave; waiting for binlog to be updated
Info: NULL
*************************** 4. row ***************************
Id: 3113
User: replikator
Host: iconnect2:45781
db: NULL
Command: Binlog Dump
Time: 2086
State: Has sent all binlog to slave; waiting for binlog to be updated
Info: NULL
*************************** 5. row ***************************
Id: 3123
User: stefan
Host: localhost
db: apollon
Command: Query
Time: 0
State: NULL
Info: SHOW FULL PROCESSLIST
SHOW PROCESSLIST
出力には、次のカラムがあります:
-
接続識別子。 これは、
INFORMATION_SCHEMA
PROCESSLIST
テーブルのID
カラムに表示される値と同じで、パフォーマンススキーマthreads
テーブルのPROCESSLIST_ID
カラムに表示され、スレッド内でCONNECTION_ID()
関数によって返されます。 -
このステートメントを発行した MySQL ユーザー。
system user
の値は、遅延行ハンドラスレッド、レプリカホストで使用される I/O または SQL スレッドなど、タスクを内部的に処理するためにサーバーによって起動される非クライアントスレッドを指します。system user
の場合、Host
カラムにホストが指定されていません。unauthenticated user
は、クライアント接続に関連付けられたが、クライアントユーザーの認証がまだ行われていないスレッドを参照します。event_scheduler
は、スケジュールされたイベントをモニターするスレッドを指します (セクション25.4「イベントスケジューラの使用」 を参照)。注記system user
のUser
値は、SYSTEM_USER
権限とは異なります。 前者は内部スレッドを指定します。 後者は、システムユーザーと通常のユーザーアカウントカテゴリを区別します (セクション6.2.11「アカウントカテゴリ」 を参照)。 -
ステートメントを発行するクライアントのホスト名 (ホストがない
system user
を除く)。 TCP/IP 接続のホスト名は、
形式でレポートされるため、どのクライアントが何を実行しているかを簡単に判別できます。host_name
:client_port
-
スレッドのデフォルトデータベース。選択されていない場合は
NULL
。 -
スレッドがクライアントのかわりに実行しているコマンドのタイプ。セッションがアイドル状態の場合は
Sleep
。 スレッドコマンドの説明については、セクション8.14「サーバースレッド (プロセス) 情報の確認」を参照してください。 このカラムの値は、クライアント/サーバープロトコルのCOM_
コマンドとxxx
Com_
ステータス変数に対応します。 セクション5.1.10「サーバーステータス変数」を参照してください。xxx
-
スレッドが現在の状態になってからの秒数。 レプリカ SQL スレッドの場合、この値は、最後にレプリケートされたイベントのタイムスタンプとレプリカホストのリアルタイムの間の秒数です。 セクション17.2.3「レプリケーションスレッド」を参照してください。
-
スレッドが行なっていることを示すアクション、イベント、または状態。
State
の値の詳細は、セクション8.14「サーバースレッド (プロセス) 情報の確認」 を参照してください。ほとんどの状態がきわめてすばやい操作に対応します。 スレッドの状態が何秒間も特定の状態にとどまっている場合は、調査が必要な問題が発生している可能性があります。
-
スレッドが実行しているステートメント。ステートメントを実行していない場合は
NULL
。 このステートメントは、サーバーに送信されるステートメント、またはこのステートメントがほかのステートメントを実行する場合は、もっとも内側のステートメントである可能性があります。 たとえば、CALL
ステートメントが、SELECT
ステートメントを実行しているストアドプロシージャーを実行する場合、Info
値はそのSELECT
ステートメントを示します。