MySQL

MySQL5.0 [#ufcc7939]

 # vi /etc/my.cnf
 [mysqld]
 log-slow-queries = /var/log/mysql_slow.log
 long_query_time = 1 
 log-queries-not-using-indexes

|変数名|説明| |log-slow-queries| ログ出力先ファイル名(絶対パス/想定パス指定可)| |long_query_time| 指定した時間(sec)以上かかったクエリを記録(デフォルト10秒)| |log-queries-not-using-indexes |指定するとインデックスを使用しないクエリも記録する|

参考URL:http://yonchu.hatenablog.com/entry/20100716/1279301089

MySQL5.5以上 [#z469bf7a]

設定の確認 [#h21c5b54]

 mysql> show variables like 'slow%';
 +---------------------+----------------+
 | Variable_name       | Value          |
 +---------------------+----------------+
 | slow_launch_time    | 2              |
 | slow_query_log      | OFF            |
 | slow_query_log_file | mysql-slow.log |
 +---------------------+----------------+
 slow_query_log がOFFになっているとスロークエリの出力は行われません。
 mysql> show variables like 'long%';
 +-----------------+-----------+ 
 | Variable_name   | Value     |
 +-----------------+-----------+
 | long_query_time | 10.000000 |
 +-----------------+-----------+
 slow_query_logがONのとき、long_query_timeを超えるクエリがスロークエリとして出力されます。

スロークエリを出力する(コンソールからの設定) [#z58bfd20]

ファイルが無いとエラーになるので、最初にファイルを作る

 # cd /var/log
 # touch mysql_slow.log
 # chown mysql:mysql mysql_slow.log
 # vi /etc/logrotate.d/mysql
 /var/log/mysql_slow.log
 /var/log/mysql.log
 {
    weekly
    rotate 10
    delaycompress
    missingok
 }
 # mysql -p
 mysql> set global slow_query_log_file = '/var/log/mysql_slow.log';
 mysql> set global long_query_time = 5;
 mysql> set global slow_query_log = ON;

スロークエリを出力する(my.cnfの設定) [#nfc9a9c8]

 # vi /etc/my.cnf
 [mysqld]
 slow_query_log
 slow_query_log-file = /var/log/mysql/mysql-slow.sql
 long_query_time = 5 
 デフォルトでは無効になっています。

mysqldumpslowを使って集計する [#s32b45a1]

 $ mysqldumpslow -s t /var/log/mysql/mysql-slow.sql
 
 Count: 93  Time=4.40s (409s)  Lock=0.00s (0s)  Rows=5.0 (465), ebisu[ebisu]@2hosts
   show index from `bom`.`logs`
 
 Count: 86  Time=3.76s (323s)  Lock=0.00s (0s)  Rows=0.4 (34), meguro[meguro]@localhost
   SELECT `hash`.`id` FROM `hash` WHERE (`key` = 'S')
   
   -s オプションでどの項目でソートするかを指定することができます。
 

応用 [#e940a77f]

スロークエリだけでなくすべてのクエリの実行状況を集計することができます。

 mysql > set global slow_query_log_file = '/tmp/slow.log';
 mysql > set global long_query_time = 0;

参考URL:http://d.hatena.ne.jp/masayuki14/20120704