MySQL 8.0 リファレンスマニュアル


27.12.19.9 processlist テーブル

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 userUSER 値は、SYSTEM_USER 権限とは異なります。 前者は内部スレッドを指定します。 後者は、システムユーザーと通常のユーザーアカウントカテゴリを区別します (セクション6.2.11「アカウントカテゴリ」 を参照)。

  • HOST

    ステートメントを発行するクライアントのホスト名 (ホストがない system user を除く)。 TCP/IP 接続のホスト名は、host_name:client_port 形式でレポートされるため、どのクライアントが何を実行しているかを簡単に判別できます。

  • DB

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

  • COMMAND

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

  • 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 コマンドには適用されません。


関連キーワード:  テーブル, パフォーマンス, スキーマ, processlist, ステートメント, 変数, 構成, events, サーバー, replication