mysql有一个功能就是可以log下来运行的比较慢的sql语句默认是没有这个log的为了开启这个功能要修改f或者在mysql启动的时候加入一些参数如果在f里面修改需增加如下几行
long_query_time = logslowqueries = /var/youpath/slowloglogqueriesnotusingindexes
long_query_time 是指执行超过多久的sql会被log下来这里是秒
logslowqueries 设置把日志写在那里可以为空系统会给一个缺省的文件host_nameslowlog我生成的log就在mysql的data目录
logqueriesnotusingindexes 就是字面意思log下来没有使用索引的query
把上述参数打开运行一段时间就可以关掉了省得影响生产环境
接下来就是分析了我这里的文件名字叫hostslowlog
先mysqldumpslow –help以下俺主要用的是
s ORDER what to sort by (t at l al r ar etc) ‘at’ is default
t NUM just show the top n queries
g PATTERN grep: only consider stmts that include this string
s是order的顺序说明写的不够详细俺用下来包括看了代码主要有
ctlr和acatalar分别是按照query次数时间lock的时间和返回的记录数来排序前面加了a的时倒叙
t是top n的意思即为返回前面多少条的数据
g后边可以写一个正则匹配模式大小写不敏感的
mysqldumpslow s c t hostslowlogmysqldumpslow s r t hostslowlog
上述命令可以看出访问次数最多的个sql语句和返回记录集最多的个sql
mysqldumpslow t s t g “left join” hostslowlog
这个是按照时间返回前条里面含有左连接的sql语句
用了这个工具就可以查询出来那些sql语句是性能的瓶颈进行优化比如加索引该应用的实现方式等