MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLの「SHOW PROCESSLIST」コマンドとは?実行中スレッドの確認方法を解説

SHOW PROCESSLISTコマンドの概要

MySQLにおける「SHOW PROCESSLIST」コマンドは、現在実行中のスレッド(接続)の一覧を表示するためのコマンドです。デフォルトでは、自分のMySQLアカウントに関連するスレッドのみが表示されます。しかし、「PROCESS」権限を持つユーザーであれば、サーバー上で動作しているほぼすべてのスレッドを確認することができます。

このコマンドを使うことで、どのスレッドが実行中なのか、それぞれのスレッドが何をしているのかを把握でき、パフォーマンスの調査やトラブルシューティングに役立ちます。

基本的な使い方

以下のようにコマンドを実行します。

mysql> SHOW PROCESSLIST;

実行結果の例

+----+-----------------+-----------------+------+---------+------+------------------------+------------------+
| Id | User            | Host            | db   | Command | Time | State                  | Info             |
+----+-----------------+-----------------+------+---------+------+------------------------+------------------+
|  4 | event_scheduler | localhost       | NULL | Daemon  |  968 | Waiting on empty queue | NULL             |
|  9 | root            | localhost:50255 | NULL | Query   |    0 | starting               | show processlist |
+----+-----------------+-----------------+------+---------+------+------------------------+------------------+
2 rows in set (0.00 sec)

出力結果の各カラムの意味

  • Id: スレッドを識別する一意のIDです。KILLコマンドでプロセスを終了させる際に使用します。
  • User: そのスレッドを実行しているMySQLユーザー名です。
  • Host: 接続元のホスト名とポート番号です。
  • db: 現在選択されているデータベース名です。未選択の場合はNULLが表示されます。
  • Command: スレッドが実行中のコマンドの種類(Query、Sleep、Daemonなど)です。
  • Time: 現在の状態が続いている時間(秒)です。
  • State: スレッドの現在の状態やアクションを示します。
  • Info: 実行中のSQL文の内容です。何も実行していない場合はNULLになります。

データベースを変更した場合の出力の違い

使用するデータベースを変更すると、出力内容も変化します。ただし、「event_scheduler」と「root」という2つのユーザーの行は常に表示される点に注意してください。「event_scheduler」はイベントスケジューラが動作させるシステムスレッドであり、常にバックグラウンドで存在しているためです。

実際にもう一度同じクエリを実行してみましょう。

mysql> SHOW PROCESSLIST;

データベース選択後の実行結果

+----+-----------------+-----------------+----------+---------+------+------------------------+------------------+
| Id | User            | Host            | db       | Command | Time | State                  | Info             |
+----+-----------------+-----------------+----------+---------+------+------------------------+------------------+
|  4 | event_scheduler | localhost       | NULL     | Daemon  | 1148 | Waiting on empty queue | NULL             |
|  9 | root            | localhost:50255 | business | Query   |    0 | starting               | show processlist |
+----+-----------------+-----------------+----------+---------+------+------------------------+------------------+
2 rows in set (0.00 sec)

この例では、rootユーザーの「db」カラムがNULLから「business」に変わっていることがわかります。このように、SHOW PROCESSLISTを実行することで、各接続がどのデータベースを使用しているかを簡単に確認できます。

まとめ

SHOW PROCESSLIST」は、MySQLサーバー上で動作しているスレッドの状況をリアルタイムに把握できる便利なコマンドです。処理が遅いクエリの特定や、不要な接続の検出など、日々の運用管理において活用場面が多いため、出力結果の見方と合わせて覚えておくとよいでしょう。

  1. MySQLの@@identityとは?最後に挿入されたAUTO_INCREMENT値を取得する方法

    MySQLにおける@@identityとは @@identityは、現在のセッション内でAUTO_INCREMENTカラムに最後に挿入された値を返すシステム変数です。新規レコード追加後に、自動採番されたIDをすぐに取得したい場合などに活用できます。ここでは、実際にテーブルを作成して動作を確認してみましょう。 1. テーブルの作成 まず、以下のコマンドでサンプル用のテーブルを作成します。 mysql> create table DemoTable(     UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY

  2. MySQLでSELECTとSHOWコマンドの結果を1つに結合する方法

    はじめにMySQLでは、SELECT文やSHOWコマンドの実行結果を、ユーザー定義変数(セッション変数)を活用することで1つの結果セットにまとめることができます。この記事では、その具体的な方法をサンプルコード付きで解説します。基本的な構文複数のコマンド結果を1つに結合するには、以下のようなクエリを使用します。各変数に別名(エイリアス)を付けて出力するのがポイントです。select @任意の変数名1 as 別名1, @任意の変数名2 as 別名2, ......N;手順1:最初の変数を作成・初期化するまず、結合したい値を格納するための最初の変数を作成し、初期化します。mysql> set