MySQL的慢查询日志是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过long_query_time值的SQL语句(秒为单位)。
默认情况下MySql数据库没有开启慢查询日志,
mysql> show variables like '%slow_query_log%'; +---------------------+---------------------------------------------------------------------+ | Variable_name | Value | +---------------------+---------------------------------------------------------------------+ | slow_query_log | OFF | | slow_query_log_file | C:ProgramDataMySQLMySQL Server 5.5DataLAPTOP-6UTRE719-slow.log | +---------------------+---------------------------------------------------------------------+ 2 rows in set (0.00 sec)
开启慢查询日志
mysql> set global slow_query_log = 1; Query OK, 0 rows affected (0.01 sec) mysql> show variables like '%slow_query_log%'; +---------------------+---------------------------------------------------------------------+ | Variable_name | Value | +---------------------+---------------------------------------------------------------------+ | slow_query_log | ON | | slow_query_log_file | C:ProgramDataMySQLMySQL Server 5.5DataLAPTOP-6UTRE719-slow.log | +---------------------+---------------------------------------------------------------------+ 2 rows in set (0.00 sec)
其中
1.slow_query_log_file 项的值是保存慢查询日志的位置,默认缺省文件名为 host_name-slow.log。
2.这个设置的值只是环境变量,重启服务后就失效了,如果想要永久配置,要在主配置文件中修改(my.cnf中的[mysqld]下)。
slow_query_log = 1 slow_query_log_file = xxx.xxx
关于long_query_time阈值 查询和设置与上面语法一样
mysql> show variables like 'long_query_time%'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+ 1 row in set (0.00 sec) mysql> set global long_query_time=5; Query OK, 0 rows affected (0.00 sec)
当前会话看不到,重新开一个终端即可查看。(也是临时环境变量)
来一些耗时操作。。。select sleep(6);
可以在文件里查看耗时操作的具体内容
也可以这样子
mysql> show global status like '%Slow_queries%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Slow_queries | 1 | +---------------+-------+ 1 row in set (0.27 sec)
查看耗时sql的统计数量。
mysqldumpslow
--mysqldumpslow是-shell中用来方便查看慢查询日志的指令
得到返回记录集最多的10个sql
mysqldumpslow -s r -t 10 <慢查询日志路径>
得到访问次数最多的10个sql
mysqldumpslow -s c -t 10 <慢查询日志路径>
得到按时间顺序排序的前10条里面有 xxx 串的查询语句
mysqldumpslow -s t -t 10 -g "xxx" <慢查询日志路径>
具体指令 mysqldumpslow --help 查询帮助文档
以后再补..