MySQLの遅いクエリログ管理

MySQLデータベースサーバーはMySQLの遅いクエリログで設定したしきい値よりも実行時間が長いクエリをログとしてためることができ、遅いアプリケーションに関連する問題のトラブルシュートに役立てられます。MySQLデータベースクエリのしきい値は一秒とみなされ、実行時間が1秒を超過したクエリは「遅い」として登録されます。

Site24x7のログ管理ではデフォルトでMySQLの遅いクエリの監視をサポートしています。ホスト、クエリ時間、ロック時間、送信列、調査列といった項目でログが分類されるため、これらログを用いて迅速にトラブルシュートを行えます。また、ダッシュボードのクエリ時間、ロック時間、調査列、リターン列といったパラメーターの上位10の遅いクエリを表示できます。

MySQLの遅いクエリログの有効化

MySQLデータベースがインストールされているマシンにログインします。Linuxマシンならターミナル、Windowsマシンならコマンドプロンプトを開き、次のコマンドを実行します。

MySQLバージョン5.1.6以上の場合:

set global slow_query_log = 'ON';
set global slow_query_log_file ='/var/log/mysql/slow-query.log';
set global long_query_time = 10; (Unit seconds)
FLUSH LOGS;
Restart MySQL.

MySQLバージョン5.1.6未満の場合:

/etc/my.cnfファイルを編集して、次の列を[mysqld]項目に追加します。
viコマンドを用いてターミナルから直接ファイルを編集できます。

vi /etc/my.cnf
log_slow_queries = 1;
log-slow-queries=/var/log/mysql/slow-query.log
long_query_time=20

ログ管理の始め方

  1. Site24x7アカウントにログインします。
  2. Site24x7サーバー監視エージェント (Windows | Linux)をダウンロードして、MySQLデータベースが稼働しているマシンにインストールします。
  3. 管理 > アプリケーションログ > ログプロファイルに移動し、ログプロファイルの追加をクリックします。
  4. プロファイル名:ログプロファイル名を入力します。
  5. ログタイプの選択:MySQL遅いログをドロップダウンメニューから選択します。
  6. ログソース:ドロップダウンメニューからローカルファイルを選択します。
  7. ログ検索のためのファイルリスト: /var/log/mysql/slow-query.logを含めます。これはMySQLの設定に基づきます。
  8. サーバーを選択し、保存をクリックします。

ログパターン

# User@Host: $User$ @ [$Host$]<NewLine># Query_time: $QueryTime:decimal$ Lock_time: $LockTime:decimal$ Rows_sent: $RowsSent:number$ Rows_examined: $RowsExamined:number$<NewLine>!use $Database$;<NewLine>!SET timestamp=$DateTime:date:unix$;<NewLine>$Query$;!<NewLine>$NormalizedQuery:word$!

これはSite24x7で、次のサンプルログに基づきMySQLの遅いクエリログを解析するために定義されたデフォルトのログパターンです。

ログタイプ定義にはクエリ正規化クエリと呼ばれる2つの項目が存在します。
クエリ項目には実際のクエリが含まれるのに対し、正規化クエリ項目にはマスク(XX)された値が含まれます。
デフォルトで、クエリ項目はエージェント側で無視されるため、ユーザー名やパスワードなどの重要な情報が含まれます。項目設定ソースはこの項目を無視の隣にあるトグルボタンをいいえに切り換えることで生クエリを収集します。

サンプルログ

# User@Host: test[test] @ [192.168.1.2]<NewLine># Query_time: 31.896695 Lock_time: 0.000065 Rows_sent: 1023 Rows_examined: 196182<NewLine>use db100db;<NewLine>SET timestamp=1487758318;<NewLine>select USER_ID, EMAIL_ID from USER_ACCOUNT where USER_ID IN ( select USER_ID from USER_MAPPER where ID IN ( select RESOURCEID from appdetails where environment regexp '(.*)Microsoft Windows NT 5.2|Microsoft Windows NT 5.1|Microsoft Windows NT 5.0|Microsoft Windows NT 6.0(.*)'));
# User@Host: test[test] @ [192.168.1.2]<NewLine># Query_time: 31.896695 Lock_time: 0.000065 Rows_sent: 1000 Rows_examined: 196182<NewLine>use db100db;<NewLine>SET timestamp=1487758318;<NewLine>select USER_ID, EMAIL_ID from USER_ACCOUNT where USER_ID IN ( select USER_ID from USER_MAPPER where ID IN ( select RESOURCEID from appdetails where environment regexp '(.*)Microsoft Windows NT 5.2|Microsoft Windows NT 5.1|Microsoft Windows NT 5.0|Microsoft Windows NT 6.0(.*)'));
# User@Host: test[test] @ [192.168.1.2]<NewLine># Query_time: 31.896695 Lock_time: 0.000065 Rows_sent: 560 Rows_examined: 196182<NewLine>use db100db;<NewLine>SET timestamp=1487758318;<NewLine>select USER_ID, EMAIL_ID from USER_ACCOUNT where USER_ID IN ( select USER_ID from USER_MAPPER where ID IN ( select RESOURCEID from appdetails where environment regexp '(.*)Microsoft Windows NT 5.2|Microsoft Windows NT 5.1|Microsoft Windows NT 5.0|Microsoft Windows NT 6.0(.*)'));

上記のサンプルログは次の項目で分けられています。それら項目から各値が取得されSite24x7にアップロードされます。

項目名 項目値
ユーザー test[test]
ホスト 192.168.1.2
クエリ時間 31.896695
ロック時間 0.000065
送信列 1023
調査列 196182
使用データベース 100db
タイムスタンプ 1487758318
クエリ select USER_ID, EMAIL_ID from USER_ACCOUNT where USER_ID IN
( select USER_ID from USER_MAPPER where ID IN ( select RESOURCEID from
appdetails where environment regexp '(.*)Microsoft Windows NT 5.2
|Microsoft Windows NT 5.1|Microsoft Windows NT 5.0|Microsoft Windows NT 6.0(.*)'))

関連ログタイプ