使用mysqldumpslow工具找出Mysql日志资源消耗大户

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

未经允许不得转载:好玩吧 » 使用mysqldumpslow工具找出Mysql日志资源消耗大户