スマートスタイル TECH BLOG|データベース&クラウドの最新技術情報を配信

5分でわかる!!Monyogを用いてボトルネックとなるSQL文を特定する方法!

2018年10月 製品名が「Monyog」から「SQL Diagnostic Managar for MySQL」に変更となりました。変更は製品名のみで仕様および性能に変更はございません。

「Monyog MySQL Monitor and Advisor」(Monyog)とは

MySQL DBAが直面する課題の一つとして常に多くのMySQLサーバを管理しなければならない事が挙げられます。
MonyogはMySQLサーバーを監視し、MySQLの重大な問題(障害)が発生する前に分析・修正するのに役立つモニタリングツールです。

Monyogは、常にデータベース環境を自動的に監視していますので、
データベースユーザのセキュリティの強化や、データベースのパフォーマンスの最適化、
またMySQLのダウンタイムをどのように減らすことができるかに関する専門なアドバイスを提供します。

MonyogにはMySQLを監視する多彩な機能がありますが、
今回の記事ではパフォーマンスチューニングで役立つReal-Time監視機能とQuery Analyzer機能を用いてボトルネックとなるSQL文を特定する方法について説明します。

Real-Time監視機能

Real-Time監視機能とは

Real-Time監視機能はMonyogがDBサーバー上で一連のクエリを連続的に実行し、
クエリ、テーブル、データベース、ユーザ、ホスト、ロックされたクエリ、
ロックしているクエリなどを取得します。
リアルタイムで情報が取得されるため、どの時点でサーバーが何をしているかを確認することができます。

サーバーの動作を確認するには、監視セッションを開始する必要があります。セッション中で収集されたデータは後から分析するためにセッションを停止してMonyogサーバーに保存することができます。

Real-Time監視機能を用いてボトルネックのSQL文を特定する

  • 実行されたSQL文がインデックスをうまく使えているかどうか

Real-Time監視機能ではセッション中に実行された、または実行中のクエリ情報を収集しています。
収集されたクエリ情報の一覧の中から特に実行時間がかかるクエリをソートし、
対象のクエリをクリックする事でクエリの「Explain」情報が表示できます。

  • パフォーマンスに影響を及ぼすスロークエリを特定

Real-Time監視機能ではセッション中に記録されたスロークエリに関する情報も収集しています。
「Queries 」タブの中から「Slow Queries」を選ぶとセッション内で収集されたスロークエリに関する情報のみが表示されますので、ボトルネックとなるスロークエリを特定し、優先的にクエリチューニングを行う事も可能です。

Query Analyzer機能

Query Analyzer機能とは

Monyogが接続しているMySQLサーバーが出力する一般クエリログ、またはスロークエリログを参照します。
※上記のログファイルの出力が「ON」に設定している場合のみ参照できます。

また、Real-Time監視機能と同様にMonyogは記録されたクエリに対して「Explain」情報が表示できますので、Monyogユーザはデータベースサーバーのパフォーマンスに影響を及ぼすクエリを簡単に特定できます。

パフォーマンスに影響を及ぼす可能性のあるスロークエリのリアルタイム通知

Query Analyzer機能を使用してスロークエリログを参照して問題のあるSQL文を見つける際、ほとんどの場合は実行が完了しているクエリに対して分析を行っています。
しかし状況によっては、実行時間の長いクエリのリアルタイム通知が必要な場合も存在します。

Monyogは、クエリをリアルタイムで継続的に監視し、
指定された時間よりも実行時間の長いクエリに対して通知(メールまたはSNMP)を送信できます。
また、このような実行時間の長いクエリを即時に終了するオプションを指定することもできます。

設定した「long_query_time」よりクエリの実行時間が長い場合、
Monyogは自動的にユーザが登録したメールアドレス宛に以下のアラート通知が届きます。
これによりユーザはより簡単にデータベースのパフォーマンスに影響を及ぼすSQL文を特定できます。

まとめ

一般的にボトルネックとなるSQL文を特定するためにDBAは膨大なスロークエリログを調べる必要があります。
膨大なスロークエリログに記録されたクエリの中から特に実行時間がかかったクエリをリストアップした後、それぞれのクエリに対しEXPLAIN文を実行し、クエリの実行結果が同じとなるようにクエリを書き換え、EXPLAIN文を実行しクエリの実行計画が改善されたどうかを確認をする必要があります。

これらの作業は非常に煩雑で人的リソースを要するとともに作業時間も必要としています。
今回紹介したMonyogの機能を使用する事でボトルネックとなるSQL文を特定する時間の短縮や、クエリチューニングした後の実行結果の確認の自動化などが期待できます。

関連リンク


SmartStyle
Return Top