MySQL道普請便り
第7回 スロークエリーログを使って遅いクエリを収集する
最近ではPaaS型のクラウドがかなり普及しており,
そんな時には,
そこで,
デモンストレーション環境
今回使用する環境はMac OS X
mysqlのインストールの詳細に関しても割愛させていただきますが,
$ brew install mysql
また,
スロークエリーログとは?
スロークエリーログとは,
デフォルトではスロークエリーログは無効になっており,
また,
それほど問題になるケースは無いとは思いますが,
スロークエリーログを出力するように設定する
スロークエリーログはデフォルトでは出力されないため,
MySQLに設定を行うには,
クライアントから設定する場合は下記のコマンドを打ち込みます。設定値は1がONで0がOFFになります。
mysql> set global slow_query_log=1; mysql> set global long_query_time=1; mysql> set global log_queries_not_using_indexes=1; mysql> set global slow_query_log_file ='/usr/local/var/mysql/slow_query.log';
最後のslow_
設定ファイルに記載する場合は,
$ cat /etc/my.cnf [mysqld] slow_query_log=1 long_query_time=1 log_queries_not_using_indexes=1 slow_query_log_file=/usr/local/var/mysql/slow_query.log
今回の設定で行った内容は下表のとおりになります。
設定 | 設定内容 |
---|---|
slow_ | スロークエリーログを出力する際に必要となる設定。デフォルト値は0。 |
long_ | スロークエリーログを出力するためのしきい値の設定。0秒~360024365の範囲で指定。小数点以下の値を指定することでμs単位まで指定が可能。0秒を指定することで発行されたSQLを全部保存することも可能。 |
log_ | indexが未使用なクエリに関して記録をする設定。 |
slow_ | スロークエリーログが出力される先を指定。 |
次に,
スロークエリーログを発生させてみる
今回の設定でスロークエリーログが記録される条件は,
mysql> use zipcode mysql> SELECT COUNT(*) FROM zipcode WHERE city='渋谷区' AND prefecture='東京都'; +----------+ | COUNT(*) | +----------+ | 73 | +----------+ 1 row in set (0.06 sec)
今回の実行結果は0.
$ cat /var/log/slow_query.log /usr/local/Cellar/mysql/5.7.9/bin/mysqld, Version: 5.7.9 (Homebrew). started with: Tcp port: 3306 Unix socket: /tmp/mysql.sock Time Id Command Argument # Time: 2015-11-16T03:52:04.838389Z # User@Host: root[root] @ localhost [] Id: 20 # Query_time: 0.052903 Lock_time: 0.000113 Rows_sent: 1 Rows_examined: 123864 use zipcode; SET timestamp=1447645924; SELECT COUNT(*) FROM zipcode WHERE city='渋谷区' AND prefecture='東京都';
一番最後の行に注目していただくと,
まとめ
今回はスロークエリーログを使って遅いクエリを収集することができるようになりました。そこからIndexを貼り直したり,
MySQLを運用している場合には,
バックナンバー
MySQL道普請便り
- 第171回 MyDumperを使ってみよう[その2]
- 第170回 MySQLのキーワードと予約語をテーブルに使用したい場合
- 第169回 pt-variable-advisorを使ってみよう
- 第168回 MyDumperを使ってみよう[その1]
- 第167回 M1搭載MacのDockerでMySQLを動かしてみる
- 第166回 Performance_schema関数
- 第165回 MySQLの圧縮いろいろ
- 第164回 admin_address,admin_portを設定しよう
- 第163回 sysbench 1.0を使ってMySQLの負荷テストをする
- 第162回 mysqlクライアントの履歴を確認してみる