みなさんは、MySQLをリアルタイムで監視する時はどのように行いますか? 自作のスクリプトを利用したり有償ツールを用いて監視することもあるかと思います。2018年の11月にMySQLのリアルタイム監視ツールの1つであるinnotopが、MySQLのバージョン8に対応しました。そこで今回は、MySQLのリアルタイム監視ツールの紹介としてinnotopとps-topについて紹介したいと思います。なお、今回使用するOSはCentOS 7となります。
innotopのインストールと起動
CentOSでinnotopを利用するにはyumのepel-releaseを利用するか、ソースコードを取得する必要があります。yumで取得する場合はepel-releaseパッケージをインストール後innotopをインストールします。ソースコードを利用する場合はgithubのinnotopから取得できます。中にあるinnotopをそのまま実行することもできますし、Makeファイルを利用して/usr/loca/bin
配下に置くことができます。
/usr/local/bin/innotopにinnotopがインストールされていることが確認できました。
innotopの起動はソケットファイルを利用するときはinnotop -S <ソケットファイル名> -u <ユーザー名> --askpass
を実行します。リモートホストを利用する場合はinnotop -h <host名> -P <ポート> -u <ユーザー名> --askpass
を実行します。実行すると、下記のようにUptimeやQPS,テーブルの数を確認することができます。
デフォルトでは10秒で更新されますが、-d オプションを利用することで、更新間隔を変更することができます。
各モードによる監視
innotopを起動後、?
を押すと、各モードの説明と変更するキーを確認することができます。ここで筆者がよく使うモードをいくつか紹介します。
Query Listモード
Qでquery Listモードを実行することができます。Query Listモードでは現在実行中のクエリを確認することができます。実行中に流れているクエリが遅い場合などは対象のクエリのTimeカラムが増えていきます。ALTER文を実行するときや、バッチ処理などで大量の更新が実行される場合はこちらのモードでクエリが流れているか確認することができます。
Replication Statusモード
Replication Statusモードではレプリケーションの状況を確認することができます。Slave SQL StatusにはSHOW SLAVA STATUS
の結果、Master StatusにはSHOW MASTER STATUS
の結果が表示されます。
下記は第83回 マルチソースレプリケーションのスレーブ環境をReplication Statusモードで確認した結果です。マルチソースレプリケーションでも表示することが確認できます。もしリアルタイムにスレーブ遅延が発生している時は、Slave SQL StatusのTimeLagが増えていきます。
Locksモード
現在のロックの状態を確認することができます。もしロック状態が存在する場合は、下記のような情報が出力されます。この値はSHOW ENGINE INNODB STATUSから取得しています。
この他にも、buffer_pool情報を表示するInnoDB Buffersモードやトランザクションの状態を表示するInnoDB Txnsモードがあります。詳細な使い方についてはman innotop
を実行してマニュアルをご確認ください。
ps-top
ps-topはgo言語製のリアルタイム監視ツールです。こちらはMySQLのバージョンは5.6と5.7に対応しています。ps-topはperformance_schemaからデータを収集し、この情報をリアルタイムに表示することができます。
ps-topのインストール
すでにgo言語が使える環境であればgo get -u github.com/sjmudd/ps-top/cmd/ps-top
を実行すことですぐに利用することができます。さっそくmysqlslapを実行しているローカルのMySQLにps-top --socket=/tmp/mysql.sock --user=root -password='****'
を実行して接続してみます。
table_io_latencyが表示されました。ps-topには以下の7つのモードが搭載されています。
mode | 説明 |
table_io_latency | テーブルごとのレイテンシーを表示 |
table_io_ops | テーブルごとの操作数を表示 |
file_io_latency | 各ファイルのIOの時間を表示 |
table_lock_latency | テーブルごとのLock waitイベントを表示 |
user_latency | ユーザーごとのクエリの情報を表示 |
mutex_latency | mutex待ち時間を表示 |
stages_latency | イベントステージごとの情報を表示 |
これらの情報はtabキーを押すことによって各モードに切り替えることができます。また、zキーを押すことで統計情報をリセット、tキーでps-topを起動した時間からの集計かリセット以降の集計値かを切り替えることができます。
まとめ
今回はMySQLリアルタイムの状況を監視するツールとしてinnotopとps-topを紹介しました。これらのようなリアルタイムの状況を表示するツールは過去の情報を見ることはできませんが、常に今の状況がわかるので、ALTER構文の実行や大量な更新がある場合などは監視ツールを用いるなどして不測の事態に備える必要があります。