使用Anemometer基于pt-query-digest将MySQL慢查询可视化搭建文档

#使用Anemometer基于pt-query-digest将MySQL慢查询可视化搭建文档

参考资料: 
https://github.com/box/Anemometer
http://www.jianshu.com/p/092fd6359e43
http://ourmysql.com/archives/1359

##部署环境 centos6.5+mysql5.5+php5.3 ##思路 在测试机上安装Anemometer+pt-query-digest,然后拉取线上的慢日志,让开发查看慢日志。

##安装步骤

  • 1、安装percona-toolkit-2.2.12-1.noarch.rpm
  • 2、yum install php-bcmath.x86_64 -y
  • 3、建立一个slow.domain.com的虚拟主机,并在本地配置HOST
  • 4、在线上数据库授权;1.1.1.1为测试机IP
mysql -uroot -p`cat /etc/sqlpass` -e "GRANT SELECT ON *.* TO 'box_explain'@'1.1.1.1' IDENTIFIED BY 'superSecurePass';"
  • 5、把线上的slow.log拉一份到测试机
  • 6、在测试机上下载安装Anemometer
cd /data/web/slow.domain.com
git clone https://github.com/box/Anemometer.git
cd Anemometer/

测试机数据库如果是5.6

mysql -uroot -p`cat /etc/sqlpass` < mysql56-install.sql

5.5的

mysql -uroot -p`cat /etc/sqlpass` < install.sql
mysql -uroot -p`cat /etc/sqlpass` -e "grant all privileges ON slow_query_log.* to 'anemometer'@'%' IDENTIFIED BY 'superSecurePass';"

##编辑配置文件

	cd conf/
	cp sample.config.inc.php config.inc.php
	vim config.inc.php

主要配置

多个数据库我是用多张表来区分。
$conf['datasources']['db_m'] = array(
        'host'  => '2.2.2.1',
        'port'  => 3306,
        'db'    => 'slow_query_log', 
        'user'  => 'anemometer',
        'password' => 'superSecurePass',
        'tables' => array(
                'global_query_review' => 'fact',
                'global_query_review_history' => 'dimension'
        ),
        'source_type' => 'slow_query_log'
);
$conf['datasources']['db_s1'] = array(
        'host'  => '2.2.2.2',
        'port'  => 3306,
        'db'    => 'slow_query_log',
        'user'  => 'anemometer',
        'password' => 'superSecurePass',
        'tables' => array(
                's1_query_review' => 'fact',
                's1_query_review_history' => 'dimension'
        ),
        'source_type' => 'slow_query_log'
);
还需要添加一个可以explain的帐号
//$conf['plugins'] = array(下
              //  $conn['host']     = '2.2.2.1';
               // $conn['port']     = '3306';
                $conn['user'] = 'box_explain';
                $conn['password'] = 'superSecurePass';
  • 7、访问http://slow.domain.com/Anemometer 现在还没有数据,只看到一个很高大上的界面

  • 8、把pt-query-digest分析的数据写到测试机数据库里

pt-query-digest --user=anemometer --password=superSecurePass --review h=1.1.1.1,D=slow_query_log,t=global_query_review \
--history h=1.1.1.1,D=slow_query_log,t=global_query_review_history \
--no-report --limit=0% --filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\"$HOSTNAME\"" \
/root/slow.log
  • 9、完成!

##自动生成

利用RSYNC,每5分钟把线上的数据库慢日志拉到测试机上

线上数据库的RSYNC模块

[slow_log]
path=/data/mysql
ignore errors
read only = no
hosts allow=1.1.1.1

测试机

[root[@localhost](http://my.oschina.net/u/570656) sh]# cat anemometer.sh 
rsync -av rsync://2.2.2.1/slow_log/slow.log /data/lydbm_slow_log/ 
pt-query-digest --user=anemometer --password=superSecurePass --review h=1.1.1.1,D=slow_query_log,t=global_query_review \
--history h=1.1.1.1,D=slow_query_log,t=global_query_review_history \
--no-report --limit=0% --filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\"ly_db_m\"" \
/data/lydbm_slow_log/slow.log

rsync -av rsync://2.2.2.2/slow_log/slow.log /data/lydbs1_slow_log/
pt-query-digest --user=anemometer --password=superSecurePass --review h=1.1.1.1,D=slow_query_log,t=global_query_review \
--history h=1.1.1.1,D=slow_query_log,t=global_query_review_history \
--no-report --limit=0% --filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\"ly_db_s1\"" \
/data/lydbs1_slow_log/slow.log

定时

*/5 * * * * root /bin/bash /root/sh/anemometer.sh >/dev/null 2>&1

搭建过程出现的问题: Error in Query Explain Plugin: Missing field host

没有权限连接远程MYSQL,所以就explain不了

扩展阅读

mysql> desc global_query_review;
+-----------------+---------------------+------+-----+---------+-------+
| Field           | Type                | Null | Key | Default | Extra |
+-----------------+---------------------+------+-----+---------+-------+
| checksum        | bigint(20) unsigned | NO   | PRI | NULL    |       |
| fingerprint     | text                | NO   |     | NULL    |       |
| sample          | longtext            | NO   |     | NULL    |       |
| first_seen      | datetime            | YES  |     | NULL    |       |
| last_seen       | datetime            | YES  |     | NULL    |       |
| reviewed_by     | varchar(20)         | YES  |     | NULL    |       |
| reviewed_on     | datetime            | YES  |     | NULL    |       |
| comments        | text                | YES  |     | NULL    |       |
| reviewed_status | varchar(24)         | YES  |     | NULL    |       |
+-----------------+---------------------+------+-----+---------+-------+
9 rows in set (0.00 sec)

主要字段说明:

checksum : 主键, 是按fingerprint算出来的hash值。

finger : 是每条sql语句的指纹,去掉了一些变化的值(同一类型的sql语句,条件值不一样在该表中只会存在一条记录)。

sample: 符合finger的一条sql示例。

mysql> desc global_query_review_history;
+------------------------------+---------------------+------+-----+---------------------+-------+
| Field                        | Type                | Null | Key | Default             | Extra |
+------------------------------+---------------------+------+-----+---------------------+-------+
| hostname_max                 | varchar(64)         | NO   | PRI | NULL                |       |
| db_max                       | varchar(64)         | YES  |     | NULL                |       |
| checksum                     | bigint(20) unsigned | NO   | PRI | NULL                |       |
| sample                       | longtext            | NO   |     | NULL                |       |
| ts_min                       | datetime            | NO   | PRI | 0000-00-00 00:00:00 |       |
| ts_max                       | datetime            | NO   | PRI | 0000-00-00 00:00:00 |       |
| ts_cnt                       | float               | YES  |     | NULL                |       |
| Query_time_sum               | float               | YES  |     | NULL                |       |
| Query_time_min               | float               | YES  |     | NULL                |       |
| Query_time_max               | float               | YES  |     | NULL                |       |
| Query_time_pct_95            | float               | YES  |     | NULL                |       |
| Query_time_stddev            | float               | YES  |     | NULL                |       |
| Query_time_median            | float               | YES  |     | NULL                |       |
| Lock_time_sum                | float               | YES  |     | NULL                |       |
| Lock_time_min                | float               | YES  |     | NULL                |       |
| Lock_time_max                | float               | YES  |     | NULL                

字段说明

hostname_max : MySQL服务所在主机名称
db_max: 数据库名称
checksum : 同global_query_review表中的checksum,两张表通过该值关联
sample : sql示例
ts_min : 本次统计(每10分钟一次)该类型sql语句出现的最小时间
ts_max: 本次统计(每10分钟一次)该类型sql语句出现的最大时间
ts_cnt : 本次统计该sql语句出现的次数
Query_time_sum : 本次统计该类型sql语句花费的总时间
Query_time_min : 本次统计该类型sql语句执行最快的那个sql语句花费的时间
Query_time_max: 本次统计该类型sql语句执行最慢的那个sql语句花费的时间
Query_time_pct_95: 本次统计该类型sql语句执行时间位于95%分位的sql执行时间
Query_time_stddev: 本次统计该类型sql语句执行时间标准差(统计学概念)
Query_time_median: 本次统计该类型sql语句执行时间位于中位数位置的sql执行时间
index_ratio:表示的是扫描的行数/返回的结果行数

转载于:https://my.oschina.net/longquan/blog/664310

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值