对于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'    ));


   MySQL性能分析系统_第1张图片


   对于性能分析系统,可以定时采集慢查询日志的情况,修改$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/ –with-mysqli=/usr/local/lamp/mysql/bin/mysql_config  && make && make install  (编辑参数)

   mysqli 插件安装:

   在php源码包里面:cd ext/mysqli

   /usr/local/php5/bin/phpize

   ./configure –prefix=/usr/local/mysqli –with-php-config=/usr/local/php5/bin/php-config –with-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 –with-php-config=/home/work/local/php/bin/php-config && make && make install

   extension=bcmath.so