MySQL 9.5 で実装された MySQL Diagnostic Monitor (mysqldm) について

目次

はじめに

2025-10-21 にリリースされた MySQL Server 9.5 において、mysqldm(MySQL Diagnostic Monitor) コマンドが新しく実装されました。

This version includes the MySQL Diagnostic Monitor (mysqldm), a new client tool designed to collect server diagnostic information. (…)

Note
MySQL Diagnostic Monitor is only available with MySQL Enterprise Edition.

参照 : Changes in MySQL 9.5.0 (2025-10-21, Innovation Release)

今回はこのコマンドの仕様や注意点について紹介していきたいと思います。
なお、この機能は 2026 年 2 月の時点で、 MySQL Enterprise Edition でのみ使用可能 な点にご注意ください。

概要

mysqldm コマンドは MySQL サーバーの診断データを収集するクライアントツールです。診断用のクエリを定期的に実行して、その結果を JSON ファイルとして出力してくれます。

参照 : 6.5.8 mysqldm — The MySQL Diagnostic Monitor

また、mysql-client パッケージに同梱されており、リモートサーバーに対しても使用することが可能です。

既に存在する同様の機能としては、 sys.diagnostics() プロシージャが挙げられます。こちらと比較すると、以下のような違いがあります。

  • 出力結果は JSON 形式のファイルとして出力される
    • sys.diagnostics() プロシージャは表形式で出力されて、その内容は別途 tee で書き出す必要があります
  • 取得できる情報が多い
    • sys.diagnostics() では、ロック関連情報やレプリケーション関連情報は取得されません

なお、本番環境で実行する際はピーク時間帯を避けて、事前にストレージ容量を確認しておくことを推奨します。

検証環境

今回は、以下の環境で検証をおこないました。

  • Rocky Linux release 9.6 (Blue Onyx)
  • MySQL Enterprise Server 9.6.0-commercial for Linux on x86_64

使用方法

コマンドの実行例および主要なオプションは以下の通りです。なお、このツールはクライアントコマンドであるため、接続文字列や汎用オプションについては説明を省いています。

参照 : 6.5.8.1 Options

  • --iterations
    • 診断クエリを反復実行する回数を指定します。デフォルト値は 10 です
  • --delay
    • 診断クエリを実行する間隔(秒)を指定します。デフォルト値は 30 です
  • --output-dir
    • クエリの結果が格納されるディレクトリ名を指定します。デフォルトではカレントディレクトリに生成されます
    • ディレクトリを指定する場合、事前に該当ディレクトリを作成しておく必要があるのでご注意ください

これ以外のオプションの詳細はリファレンスあるいは --help オプションで確認することが可能です。
なお、執筆時点(2026 年 3 月)において、mysqldm コマンドの man ページは未登録でした。

出力内容

コマンドの実行中に標準出力へのメッセージはおこなわれないため、進捗状況については確認することが出来ない点にご注意ください。
なお、コマンドの実行中のみ、 --output-dir 内に mysqldmtemp ディレクトリが作成されるため、生成されているファイルの数から間接的に状況を確認することが可能です。

実行した結果は、自動で zip 形式に圧縮されて保存されます。

各ファイルの内容については、クエリの実行結果が QueryOutput というキーに配列としてまとめられており、その内部の ResultSet に具体的な行データが配列形式で格納されています。

収集される診断クエリは、「コマンド実行時に 1 回のみ取得されるクエリ」と、その後「定期的に取得されるクエリ」の 2 種類があります。
ファイル名の詳細については以下のリファレンスをご確認ください。

参照 : 6.5.8.2 Diagnostic Queries

それぞれのクエリの詳細については以下の通りです。

コマンド実行時に 1 回のみ取得されるクエリ

サーバーシステム変数やテーブル情報、レプリケーションやパフォーマンススキーマの設定などを含めて、基本的な設定関連の情報が取得されます。
なお、ユーザー情報やインデックス統計などは取得されていないようです。

また、リファレンスには記載されていませんが、MySQL Server 9.1 から Enterprise Edition でのみ実装されているオプショントラッカーコンポーネント(component_option_tracker)mysql_option.option_usage テーブルに関する情報も取得されているようです。

定期的に取得されるクエリ

サーバーステータス変数やプロセスリスト、レプリケーションの状態や各種ロック情報など、動的に変化する情報が取得されています。

実行に必要な権限

必要な権限についてリファレンス上は明記されていませんが、検証をおこなったところ、以下の権限が必要であることがわかりました。
なお、sysperformance_schema データーベースについては、今後参照テーブルが増えることを想定してすべてのテーブルに対して権限を付与しています。

  • performance_schema.* に対する SELECT 権限
  • sys.* に対する SELECTEXECUTE 権限
  • mysql_option.* に対する SELECT 権限
  • mysql.slave_master_infomysql.slave_relay_log_info に対する SELECT 権限
  • 以下の GLOBAL および動的権限
    • OPTION_TRACKER_UPDATER あるいは OPTION_TRACKER_OBSERVER
    • PROCESS
    • REPLICATION CLIENT
    • REPLICATION SLAVE
    • XA_RECOVER_ADMIN

また、クエリが実行できない場合でも mysqldm コマンド自体はエラーになりません。
実行後の各ファイルを確認すると、実行できなかったクエリについては結果の代わりにエラーの詳細が記載されていることがわかります。

注意点

実際に何回か使用してみたところ、いくつか気になる箇所がありました。

各ファイルは 1 回分の取得結果しか保持していない

定期的に取得されるクエリであっても、各ファイルは 1 回分の取得結果のみを保持します。そのため、--iterations に 2 以上を指定した場合、1 回目は [ファイル名].json、2 回目は [ファイル名]1.json、のように出力されます。

また、各ファイル内には情報取得時刻が保存されていません。そのため、クエリが実行された時刻を確認したい場合、取得時刻を格納したファイル(nowN.json)と突合する必要があります。

情報の取得タイミングと実行間隔が直感的でない

定期的に取得されるクエリは、コマンド実行時に 1 回のみ取得されるクエリと同じタイミングで、1 回目の取得がおこなわれます。
また、--delay による待機がおこなわれた後で --iterations のチェックがおこなわれているため、コマンドの終了タイミングに 1 回分のズレがあります。

--iterations=2, --delay=30 で取得した場合の例

カラム名は取得されない

各クエリの実行結果にはカラム名が取得されていません
そのため、以下のように何のクエリの結果であるか不明なファイルについては、実行されたクエリをその都度確認する必要があります。

利用例

本機能は高負荷時の診断情報の取得を目的として設計されているため、MySQL Server を監視する際に利用されることが想定されています。

従来の監視系ツールと比較すると、以下の部分で差別化がおこなわれています。

リモートサーバーでの実行が可能

取得している情報はすべて SELECT 系のコマンドであるため、リモートサーバー上で実行することが可能です。これにより、取得したログファイルはサーバー側のディスクを圧迫しません。

また、現時点では実行することでパフォーマンス影響のあるクエリは見受けられないので、環境やデータ量にも依存しますが、低負荷で実行できるのではないかと思われます。
ただし、innodb_trx テーブルなど、環境によっては結果が非常に大きくなる可能性があるクエリも存在するため、実行しても問題がないかは事前に確認しておくことを推奨いたします。

OS 側の負荷情報は取得されない

MySQL の内部負荷情報を確認することはできますが、OS 側のリソース使用情報については一切取得されていません
そのため、実際にログの分析をおこなう場合は、vmstat などの情報を別途取得するか、既存の監視ツールとあわせて調査する必要がある点にご注意ください。

連携の容易性

ファイルはすべて JSON 形式で保存されているため、直接ファイルを確認する際の視認性はあまり良くないですが、API などへの連携がしやすくなっています。
たとえば以下のように、 show_global_statusN.json ファイルの値を取得時刻毎に並べて、CSV 形式に変換することも容易です。

まとめ

ここまで、mysqldm コマンドの使い方や仕様について確認してきました。
これほどまでに MySQL サーバーの詳細情報を取得できるのは、他の監視ツールにはなかった機能です。なお、まだイノベーションリリースでの実装であるためか、情報の重複や一部仕様に気になる点があったので今後の改良にも期待したいと思います。
また、負荷の原因調査の際などは、基本的に情報は取得しすぎても困ることはないため、コマンド 1 つで網羅的に確認できるのは便利ではないかと思います。今後は弊社のサポートにおいても、取得をご依頼させていただくことがあるかもしれません。

Enterprise Edition でのみ使用可能な点は残念ですが、使用できる方は今後の調査の際に是非活用してみてはいかがでしょうか。

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃MySQLのサポート業務に従事している有資格者で構成された技術サポートチームがMySQLに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次