継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

MySQL8 のプロセスを確認するときに実行するコマンドを学び直した

タダです.

MySQL で実行されているプロセスを確認するときは SHOW PROCESSLIST を叩いて確認してきました.MySQL8 のドキュメントを見ていると別の方法で確認する方法を知ったのでこの記事でまとめます.

SHOW PROCESSLIST の代替テーブル

さて本題ですが,SHOW PROCESSLIST の代替として processlist テーブルが有ることを知りました.ドキュメントによるとパフォーマンスが向上するとあるので, processlist テーブルを使用していくと良さそうです.

これは、デフォルトの SHOW PROCESSLIST 実装とは異なり、mutex を必要とせず、パフォーマンス特性が向上します

dev.mysql.com

dev.mysql.com

processlist テーブルは peformace_schema の中にあります.実際に SELCT SLEEP(10); を実行していろいろ確認してみます.なお,実行環境は下記のとおりです.

$ sw_vers
ProductName:        macOS
ProductVersion:     14.5
BuildVersion:       23F79
$ mysql -V
mysql  Ver 8.0.39 for macos14.4 on x86_64 (Homebrew)

SHOW PROCESSLISTprocesslist テーブルの実行結果を比較する

processlist テーブルは SHOW PROCESSLIST の代替となるため,実行結果を見て比較してみます.出力内容を見てもカラム名は違えど,内容は確かに代替されているなと感じます.

SHOW PROCESSLIST の実行結果

mysql> SHOW FULL PROCESSLIST\G
*************************** 1. row ***************************
     Id: 5
   User: event_scheduler
   Host: localhost
     db: NULL
Command: Daemon
   Time: 3045
  State: Waiting on empty queue
   Info: NULL
*************************** 2. row ***************************
     Id: 8
   User: root
   Host: localhost
     db: NULL
Command: Query
   Time: 0
  State: init
   Info: SHOW FULL PROCESSLIST
*************************** 3. row ***************************
     Id: 9
   User: root
   Host: localhost
     db: dl_test
Command: Query
   Time: 7
  State: User sleep
   Info: SELECT SLEEP(10)
3 rows in set, 1 warning (0.00 sec)

processlist テーブルの実行結果

mysql> SELECT * FROM performance_schema.processlist\G
*************************** 1. row ***************************
              ID: 5
            USER: event_scheduler
            HOST: localhost
              DB: NULL
         COMMAND: Daemon
            TIME: 2245
           STATE: Waiting on empty queue
            INFO: NULL
EXECUTION_ENGINE: PRIMARY
*************************** 2. row ***************************
              ID: 8
            USER: root
            HOST: localhost
              DB: NULL
         COMMAND: Query
            TIME: 0
           STATE: executing
            INFO: SELECT * FROM performance_schema.processlist
EXECUTION_ENGINE: PRIMARY
*************************** 3. row ***************************
              ID: 9
            USER: root
            HOST: localhost
              DB: dl_test
         COMMAND: Query
            TIME: 2
           STATE: User sleep
            INFO: SELECT SLEEP(10)
EXECUTION_ENGINE: PRIMARY
3 rows in set (0.00 sec)

なお, processlist テーブルのカラムの役割は次の通りです.

  • ID: 接続識別子
  • USER: 実行ユーザー
  • HOST: ホスト名
  • DB: スレッドのデータベース名
  • COMMAND: スレッドがクライアントのかわりに実行しているコマンドのタイプ
  • TIME: スレッドが現在の状態になってからの秒数
  • STATE: スレッドが行なっていることを示すアクション,イベント,または状態
  • INFO: スレッドが実行しているステートメント

まとめ

SHOW PROCESSLIST の代替になる processlist テーブルに付いて調べた結果を簡単にまとめました.今後は processlist テーブルを叩いて確認します.