在之前的文章中已有提过如何利用 mysqlreport 这套工具来掌握 MySQL 目前的运作状况(MySQL 效能监控工具--mysqlreport),它可以协助我们了解 MySQL Server 的健康状况以及 MySQL Server 大部份时间在处理什么类型的 Query,但还有一个关键的问题没有回答,就是在那些特定类型的 Query 中,MySQL 实际上到底是把 CPU 运算时间花在哪些 Query 上?若想要回答这个问题就必须要分析 MySQL 的 Log 才能得知。
大致上来说,MySQL 提供三大类的 LOG:
1. Binary Log:记录所有对于数据库的修改操作
2. General Log:记录所有 Client 发送到 Server 的 Query
3. Slow Log:记录所有的 Slow Query
藉由分析 General Log,我们可以清楚的得知 MySQL Server 最常执行的 Query 有哪些;观察 Slow Log 则可以让我们得知到底是哪些 Query 造成 MySQL Server 效能低落。知道了这些信息以后我们才有办法对 MySQL Server 进行进一步的调整与最佳化,例如以适当的 Index 提高 MySQL 最常执行的 Query 的效率,或是去除造成 Slow Query 的成因(poor index, join...等)。视您的 MySQL Server 的忙录状态而定,您的 General Log(或 Slow Log) 有可能会非常的庞大,要以肉眼来分析是一项不可能的任务,比较实际的作法是自己撰写 Scripts 去进行 Log 分析。若您不想花时间自行开发程序,不妨试试由 Daniel Nichter 所提供的 mysqlsla。
官方网站: http://hackmysql.com/
软件下载: http://hackmysql.com/mysqlsla
Log 分析步骤:
1. 开启 MySQL Server 的 General Log 与 Slow Log
2. 以 mysqlsla 分析 Log 档案
3. 解读报表
MySQL Server Log 分析
一、开启 MySQL Server 的 General Log 与 Slow Log
要分析 Log 档案之前,你当然要先有可以分析的 Log 档案。要开启 MySQL Server 的 General Log 与 Slow Log,需要修改 MySQL Server 的系统设定文件并重新启动 MySQL。
引用:
/etc/my.cnf:
[mysqld]
log=general-log
log-slow-queries=slow-log
二、以 mysqlsla 分析 Log 档案
mysqlsla 其实是一支 Perl Scripts,使用方式很间单,语法如下:
A. 分析 General Log
mysqlsla -lt slow slow.log -R print-unique -mf "db=foo" -sf "+SELECT"