对于MySQL慢查询日志的分析,现已由多种工具来提供;最原始的mysqldumpslow,功能比较齐全的 mysqlsla和percona的 pt-query-digest;以上工具大大提高了DBA来分析数据库的性能效率,减少了过多的猜测过程;
如果能实现定时分析SQL并且进行可视化展示呢?
适用过Query-Digest-UI-master 这个UI插件,在配合 percona的 pt-query-digest工具,只是简单做到一个可视化的结果;如果对于多个服务器的分析,这个表现的就很吃力;
对于MySQL慢查询的分析及可视化我们可以利用开源软件Anemometer ,
功能:
可以针对多个DB中的慢查询进行分析;
提供explain 功能;
对某个SQL语句的使用情况生成图片,并能生成永久链接;
支持performance_schema 性能采集;
根据相应时间或其他指标进行排序:
等等;
对percona pt-query-digest 的使用可以参考这篇博客:http://weipengfei.blog.51cto.com/1511707/953075 (这次使用的版本为2.1)
重点说一下下面两个参数:
--review:将收集的结果存储到数据库中,下次分析的时候如有重复可不进行记录;
--review-history:存储收集的历史数据,并进行SQL趋势分析;
(如果没有相应的表的话可 使用 --create-review-table 和 --create-review-history-table 两个参数创建)
简单举例:
pt-query-digest --filter '(($event->{Full_scan} || "") eq "yes") || (($event->{Full_join} || "") eq "yes")' slow.log
Anemometer 是需要LNMP或者lamp的支持的(PHP 5.3+);
pt-query-digest执行过程:
$ pt-query-digest --user=anemometer --password=superSecurePass \ --review h=db.example.com,D=slow_query_log,t=global_query_review \ --review-history h=host,D=slow_query_log,t=global_query_review_history \
--no-report --limit=0% \
--filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\"$HOSTNAME\"" \ /var/lib/mysql/db.example.com-slow.log
对于$HOSTNAME参数我们可以灵活运用,可针对不同主机进行查看;
$ mysql -h db.example.com < install.sql
配置文件修改:
$ cd anemometer/conf$ cp sample.config.inc.php config.inc.php
$conf['datasources']['localhost'] = array( 'host' => 'db.example.com', 'port' => 3306, 'db' => 'slow_query_log', 'user' => 'anemometer', 'password' => 'superSecurePass', 'tables' => array( 'global_query_review' => 'fact', 'global_query_review_history' => 'dimension' ));
对于性能分析系统,可以定时采集慢查询日志的情况,修改$hostname 确定每台主机,即可;
想要分析整个SQL的情况,可以使用tcpdump进行抓包处理,在用pt-query-digest分析
有兴趣的同学,我们可以研究下 pt-query-digest源码
FAQ:
个人附上安装PHP的时候的注意事项:
--prefix=/usr/local/lamp/php --with-apxs2=/usr/local/lamp/bin/apxs --with-mysql=/usr/local/lamp/mysql --enable-pdo --with-pdo-mysql=/usr/local/lamp/mysql/bin/mysql_config --with-iconv=/usr/local/ �Cwith-mysqli=/usr/local/lamp/mysql/bin/mysql_config && make && make install (编辑参数)
mysqli 插件安装:
在php源码包里面:cd ext/mysqli
/usr/local/php5/bin/phpize
./configure �Cprefix=/usr/local/mysqli �Cwith-php-config=/usr/local/php5/bin/php-config �Cwith-mysqli=/usr/local/mysql/bin/mysql_config
在php.ini 文件中添加
extension=mysqli.so;
安装bcmath扩展
cd /lamp/php-5.2.6/ext/bcmath
/home/work/local/php/bin/phpize
./configure �Cwith-php-config=/home/work/local/php/bin/php-config && make && make install
extension=bcmath.so