MySQL优化不是一劳永逸的工作,而是一个持久战。其中慢查询日志的分析是一个重要手段,以前我总是手动大概看看,不过这实在不是长久之计,今天试用了一下mysqldumpslow和mysqlsla,感觉效率高多了。
mysqldumpslow
mysqldumpslow是官方提供的perl脚本,所以你也不用费劲巴拉的安装了,只要有mysql的环境基本就能用:
/path/to/mysqldumpslow -s c
其中参数(-s c)的意思就是按照各种慢查询条数排序。不过mysqldumpslow有一个挺不爽的缺点,就是查询的结果只有一些抽象的SQL,没有可供实际运行的SQL例子。
mysqlsla
mysqlsla是第三方提供的perl脚本,不过它功能更强悍,可以分析包括慢查询在内的多种格式的日志,同时没有上面所说的mysqldumpslow的缺点。
tar zxf http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz
cd mysqlsla-2.03
perl Makefile.PL
make
make install
使用起来很简单:
/path/to/mysqlsla slow.log
mysqlsla会自动判断日志类型,缺省会打印出前十条结果,可以通过类似“–top 100”的参数来修改,如果觉得每次输入麻烦,还可以建立一个配置文件“~/.mysqlsla”,在文件里写上:top=100,这样就不用每次都手动输入参数了。
还有很多其他的工具,不过我感觉只要会用这两个就足够了,mysqldumpslow相对通用,mysqlsla相对强大,剩下其他的杂七杂八的工具不看也罢。
慢查询分析是个长期工作,即便系统长时间没有引入新的SQL查询,也可能由于不断更新数据使得数据分布特征发生变化,从而导致索引失效,进而产生慢查询。所以说平时要多留神,有了上面介绍的利器,工作很清闲很多。