今日は、MySQL 8.0.35で非推奨になった「SHOW PROCESSLIST」の代わりのパフォーマンススキーマを見てみるの日。
初めに
この記事はMySQL Advent Calendar 2024の23日目の記事です。
目次
とある日
2023年10月25日の8.0.35のバージョンアップにより、INFORMATION_SCHEMA.PROCESSLISTが非推奨になりました。
そのため、INFORMATION_SCHEMA.PROCESSLISTを使用するSHOW PROCESSLISTも合わせて非推奨になりました。
どうやら、これからはパフォーマンススキーマを使った参照が推奨されているようです。
INFORMATION_SCHEMA.PROCESSLISTは非推奨であり、将来のMySQLリリースで削除される可能性があります。そのため、そのテーブルを使用する SHOW PROCESSLIST の実装も非推奨となります。
代わりに SHOW PROCESSLIST のパフォーマンススキーマ実装を使用することを推奨します。そのため、performance_schema_show_processlist も非推奨となり、将来の MySQL リリースで削除される可能性があります。(WL #15915)
MySQL :: MySQL 8.0 リリースノート :: MySQL 8.0.35 の変更点 (2023-10-25、一般提供)
8 系でSHOW PROCESSLISTを実行する
まずは、8系でコマンドを実行するとどうなるのかを見てみます。
(root@localhost) [(none)] 8.4.3 > show processlist; +----+-----------------+-----------+------+---------+------+------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-----------------+-----------+------+---------+------+------------------------+------------------+ | 5 | event_scheduler | localhost | NULL | Daemon | 43 | Waiting on empty queue | NULL | | 8 | root | localhost | NULL | Query | 0 | init | show processlist | +----+-----------------+-----------+------+---------+------+------------------------+------------------+ 2 rows in set, 1 warning (0.00 sec)
実行するとWarningが表示されます。
Warningの内容を見てみます。
(root@localhost) [(none)] 8.4.3 > show warnings; +---------+------+-------------------------------------------------------------------------------------------------------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------------------------------------------------------------------------------------------------------+ | Warning | 1287 | 'INFORMATION_SCHEMA.PROCESSLIST' is deprecated and will be removed in a future release. Please use performance_schema.processlist instead | +---------+------+-------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
'INFORMATION_SCHEMA.PROCESSLIST' is deprecated and will be removed in a future release. Please use performance_schema.processlist instead
↓翻訳
'INFORMATION_SCHEMA.PROCESSLIST'は非推奨であり、将来のリリースで削除される予定です。代わりにperformance_schema.processlistを使用してください。
これから推奨される performance_schema.processlist
では、続いてはこれから推奨されている方法になります。
パフォーマンススキーマに以下のテーブルがあります。
MySQL :: MySQL 8.4 Reference Manual :: 29.12.22.7 The processlist Table
performance_schema.processlist
普通に実行してみる
ほぼ同じ感じですね。
(root@localhost) [(none)] 8.4.3 > select * from performance_schema.processlist; +----+-----------------+-----------+------+---------+------+------------------------+----------------------------------------------+------------------+ | ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO | EXECUTION_ENGINE | +----+-----------------+-----------+------+---------+------+------------------------+----------------------------------------------+------------------+ | 5 | event_scheduler | localhost | NULL | Daemon | 1438 | Waiting on empty queue | NULL | PRIMARY | | 8 | root | localhost | NULL | Query | 0 | executing | select * from performance_schema.processlist | PRIMARY | +----+-----------------+-----------+------+---------+------+------------------------+----------------------------------------------+------------------+ 2 rows in set (0.01 sec)
EXECUTION_ENGINEだけ知らないカラムです。
テーブル定義を見てみる
(root@localhost) [(none)] 8.4.3 > desc performance_schema.processlist; +------------------+-----------------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------------+-----------------------------+------+-----+---------+-------+ | ID | bigint unsigned | NO | PRI | NULL | | | USER | varchar(32) | YES | | NULL | | | HOST | varchar(261) | YES | | NULL | | | DB | varchar(64) | YES | | NULL | | | COMMAND | varchar(16) | YES | | NULL | | | TIME | bigint | YES | | NULL | | | STATE | varchar(64) | YES | | NULL | | | INFO | longtext | YES | | NULL | | | EXECUTION_ENGINE | enum('PRIMARY','SECONDARY') | YES | | NULL | | +------------------+-----------------------------+------+-----+---------+-------+ 9 rows in set (0.00 sec)
EXECUTION_ENGINEをドキュメントでみてみると、あまり気にしなくてもいい値のようです。
MySQL :: MySQL 8.0 リファレンスマニュアル :: 27.12.19.9 processlist テーブル
クエリ実行エンジン。値は または PRIMARYです SECONDARY。HeatWave Service および HeatWave で使用する場合、PRIMARYエンジンは で InnoDB、 SECONDARYエンジンは HeatWave ( RAPID) です。MySQL Community Edition Server、MySQL Enterprise Edition Server (オンプレミス)、および HeatWave のない HeatWave Service の場合、値は常に ですPRIMARY。
MySQL :: MySQL 8.4 Reference Manual :: 29.12.22.7 The processlist Table
〆
ネタとして古いですが、最近仕事でトラブルシュートとかする際に利用するコマンドなので新しい方式に慣れないとなと思い書きました。
使い方も特別変わらないですが、テーブル名を覚えてないと行けないのでその点は注意かなって感じでした。
本当は、パフォーマンススキーマというカテゴリーで、クエリプロファイルや変数の確認もやりたかったのですが、12月に入ってからPCの調子が悪く検証しようとするとPCがクラッシュするので、一番知りたかったperformance_schema.processlistだけまとめました。
参考情報
MySQL :: MySQL 8.4 リファレンスマニュアル :: 15.7.7.31 SHOW PROCESSLIST ステートメント
MySQL :: MySQL 5.7 リファレンスマニュアル :: 25.20 パフォーマンススキーマシステムおよびステータス変数テーブルへの移行
MySQL :: MySQL 8.0 リファレンスマニュアル :: 1.3 MySQL 8.0 の新機能
MySQL :: MySQL 8.0 リファレンスマニュアル :: 26.51.21 INFORMATION_SCHEMA INNODB_LOCK_WAITS テーブル
MySQL :: MySQL 8.0 リファレンスマニュアル :: 27.19.1 パフォーマンススキーマを使用したクエリープロファイリング
MySQL :: MySQL 8.2 リリースノート :: MySQL 8.2.0 の変更点 (2023-10-25、イノベーションリリース)
MySQL :: MySQL 8.4 リファレンスマニュアル :: 15.7.7.33 SHOW PROFILES ステートメント