今日はなにの日。

気になったこと勉強になったことのメモ。

今日は、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 ステートメント