MySQL数据库有一个功能就是可以以日志的形式记录下来运行的比较慢的sql语句,默认是没有开启这个功能的。为了开启这个功能,需要要修改my.cnf或者在mysql启动的时候加入一些参数。如果在my.cnf里面修改,需增加如下几行:
long_query_time = 1 log-slow-queries = /data/log/slowQuery.log log-queries-not-using-indexes
解释:
long_query_time 是指执行超过多久的sql会被log下来,这里是1秒。
log-slow-queries 设置把日志写在那里,可以为空,系统会给一个缺省的文件host_name-slow.log,我生成的log就在/data/log/slowQuery.log目录。
log-queries-not-using-indexes 就是字面意思,log下来没有使用索引的query。
或者
slow-query-log=1 slow-query-log-file=/data/log/slowQuery.log long-query-time=1 log-slow-admin-statements
慢查询日志中记录的是执行时间较长的query,也就是我们常说的slow query,通过设–log-slow-queries[=file_name]来打开该功能并设置记录位置和文件名,默认文件名为hostname-slow.log,默认目录也是数据目录。
慢查询日志采用的是简单的文本格式,可以通过各种文本编辑器查看其中的内容。其中记录了语句执行的时刻,执行所消耗的时间,执行用户,连接主机等相关信息。MySQL还提供了专门用来分析慢查询日志的工具程序mysqlslowdump,用来帮助数据库管理人员解决可能存在的性能问题。
【mysqldumpslow –help可显示其参数的使用】
使用的参数:
-s,是order的顺序
al 平均锁定时间
ar 平均返回记录时间
at 平均查询时间(默认)
c 计数
l 锁定时间
r 返回记录
t 查询时间
访问次数最多的10个sql语句:
mysqldumpslow -s c -t 10 /data/log/slowQuery.log
返回记录集最多的10个sql
mysqldumpslow -s r -t 10 /data/log/slowQuery.log
查找执行时间最慢的10条sql语句,【其中-s t是指此类类型的语句的执行总时长】
mysqldumpslow -s t -t 10 /data/log/slowQuery.log
查找sql语句最多执行时间的前10项,时间
cat /data/log/slowQuery.log | grep Query_time | awk '{print $3}' | sort -nr | head -n 10
查找sql语句锁表最多执行时间的前10项,时间
cat /data/log/slowQuery.log | grep Lock_time | awk '{print $5}' | sort -nr | head -n 10