タダです.
MySQL で実行されているプロセスを確認するときは SHOW PROCESSLIST
を叩いて確認してきました.MySQL8 のドキュメントを見ていると別の方法で確認する方法を知ったのでこの記事でまとめます.
SHOW PROCESSLIST の代替テーブル
さて本題ですが,SHOW PROCESSLIST
の代替として processlist
テーブルが有ることを知りました.ドキュメントによるとパフォーマンスが向上するとあるので, processlist
テーブルを使用していくと良さそうです.
これは、デフォルトの SHOW PROCESSLIST 実装とは異なり、mutex を必要とせず、パフォーマンス特性が向上します
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 PROCESSLIST
とprocesslist
テーブルの実行結果を比較する
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
テーブルを叩いて確認します.