問題があると思われるSQLの特定には、SQL Diagnostic ManagerのQuery Analyzer機能が最適です。SQL Diagnostic Managerでは、以下のさまざまな方法で問題のSQLを見つけることができます。
- 定期的にSHOW PROCESSLISTスナップショットを収集する(SQL Diagnostic Manager Snifferを使用して)
- MySQL Proxy(MySQLプロキシ)を使用してプロファイリングデータを収集する(SQL Diagnostic Manager Snifferを使用して)
- Performance schema(パフォーマンススキーマ)テーブルを利用する(events_statements_summary_by_digest、events_statements_history_long)
- Slow Query Log(スロークエリログ)とGeneral Query Log(一般クエリログ)を構文解析する(SQL Diagnostic Manager Log Parserを使用して)
いずれの方法にも、長所と短所があります。
SHOW PROCESSLISTは、すべてのMySQLバージョンで利用でき、セットアップが最も簡単です。とはいえ、SHOW PROCESSLISTのスナップショットを実行しても、すべてのクエリをキャプチャできるとは限りません。多くの存在時間の短いクエリが、2つの連続スナップショット間で見落とされがちです。ただ、実行時間が長いクエリを探す方法としては、最も処理時間が短く簡単です。
ログの構文解析をするには、追加のセットアップが少し必要です。また、General Query Log(一般クエリログ)に切り替えると、サーバーに少なからぬ負荷がかかります。Slow Query Log(スロークエリログ)は、常時オンにしておいてください。Slow Query Logの構文解析は、不正クエリの検索方法としては効果的です。
MySQL Proxy(MySQLプロキシ)を使用すると、プロファイリングSQLに関する最も正確な情報が得られます。ただし、プロファイリングの間に、クライアントをMySQL Proxyに接続する設定にする必要があります。そのMySQL Proxyは、MySQLサーバーに接続します。MySQL Proxyを使用すると、すべてのクエリを確実にプロファイルできます。この方法は、問題のあると思われるクエリの検索に時間はかかりませんが、何千回も実行しなくてはなりません。したがって、そのようなクエリを除去できればアプリケーションのパフォーマンスを大幅に向上させることができます。
パフォーマンススキーマベースのスニッファーは、MySQLサーバーのperformance_schemaデータベースを使用します。SQL Diagnostic Managerは、パフォーマンススキーマデータベースを照会して、定期的にスナップショットを収集します。各クエリはすべて、パフォーマンススキーマデータベースに保存されるため、SQL Diagnostic Managerは、存続期間の短いクエリでもこの方法で表示します。
SQL Diagnostic Manager Query Analyzer(クエリアナライザー)機能を特定のサーバーに使用するには、そのサーバーの‘general query log(一般クエリログ)’または‘slow query log(スロークエリログ)’の詳細情報を‘Connection Settings(接続設定)’で設定するか、‘query sniffer(クエリスニッファー)’をそのサーバーに有効にしておきます。
前述のツールで問題のSQLを探す作業は、ほとんど常に事後分析になります。状況によっては、長時間実行しているクエリにおけるリアルタイム通知が望ましい場合があります。SQL Diagnostic Managerは、リアルタイムで、常時クエリを監視して、指定した時間を超えて実行に時間がかかるクエリについては通知(メールまたはSNMPで)を送信します。また、このようなクエリには、ただちにキルできるオプションも指定することができます。
注意
SHOW PROCESSLISTのスナップショットを取得するSQL Diagnostic Manager Sniffer(スニッファー)とProcesslist(プロセスリスト)機能には、レポートの生成と以後の解析のためにSniffer(スニッファー)は取り出した情報をデータベースに保存するのに対して、Processlist機能は情報をそのまま表示するだけで、操作やソートはしないという違いがあります。
注意:Monyogをご利用の方
この機能は、Monyog EnterpriseとUltimateで利用できます。