温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-08-11 15:47:13 来源:网络 阅读:1463 作者:李伯亿 栏目:数据库

If you're just completely itching to start using this tool, here's what you need:

1、a MySQL database to store query analysis data in.

2、pt-query-digest.You may as well just get the whole Percona Toolkit while you're at it :)

3、a slow query log from a MySQL server (see The Slow Query Log for info on getting one)

4、a webserver with PHP

 

The first first

[root@xiaoya anemometer]# wget percona.com/get/percona-toolkit.rpm
[root@xiaoya ~]# yum install -y percona-toolkit.rpm

Then,Pt-query-digest reference configuration is given

[code collapse="false"]
pt-query-digest --user=数据库用户名 --password=数据库密码 --review h=数据库IP和域名,D=slow_query_log,t=global_query_review --history h=数据库IP和域名,D=slow_query_log,t=global_query_review_history --no-report --limit=0% --filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\"$HOSTNAME\"" 数据库日志文件地址
[/code]

next,Grammar and important options

pt-query-digest [OPTIONS] [FILES] [DSN]
--create-review-table 当使用--review参数把分析结果输出到表中时,如果没有表就自动创建。
--create-history-table 当使用--history参数把分析结果输出到表中时,如果没有表就自动创建。
--filter 对输入的慢查询按指定的字符串进行匹配过滤后再进行分析
--limit限制输出结果百分比或数量,默认值是20,即将最慢的20条语句输出,如果是50%则按总响应时间占比从大到小排序,输出到总和达到50%位置截止。
--host MySQL服务器地址
--user mysql用户名
--password mysql用户密码
--history 将分析结果保存到表中,分析结果比较详细,下次再使用--history时,如果存在相同的语句,且查询所在的时间区间和历史表中的不同,则会记录到数据表中,可以通过查询同一CHECKSUM来比较某类型查询的历史变化。
--review 将分析结果保存到表中,这个分析只是对查询条件进行参数化,一个类型的查询一条记录,比较简单。当下次使用--review时,如果存在相同的语句分析,就不会记录到数据表中。
--output 分析结果输出类型,值可以是report(标准分析报告)、slowlog(Mysql slow log)、json、json-anon,一般使用report,以便于阅读。
--since 从什么时间开始分析,值为字符串,可以是指定的某个”yyyy-mm-dd [hh:mm:ss]”格式的时间点,也可以是简单的一个时间值:s(秒)、h(小时)、m(分钟)、d(天),如12h就表示从12小时前开始统计。
--until 截止时间,配合—since可以分析一段时间内的慢查询。

 

Install  anemometer

First up, grab the anemometer code from github. Navigate to the document root of your web server and snag a copy of the Box Anemometer code.

[root@xiaoya ~]# git clone git://github.com/box/Anemometer.git anemometer

or ,if you have 9418 port closed:

[root@xiaoya ~]# git clone

then change your current working directory to the anemometer directory:

[root@xiaoya ~]# cd anemometer

Next, you should connect to the MySQL database you're looking to store the analysis data in and issue the following command:

[root@xiaoya anemometer]# mysql -uroot -p123456 < install.sql 
[root@xiaoya anemometer]# mysql -uroot -p123456 -e "grant ALL ON slow_query_log.* to 
 BY '123456';"

 Next, grab that slow query log file you have (mine's called "slow.log"!), and run pt-query-digest on it: NOTE: I'm using a BASH 3.0 shell here on my MySQL database server! This is so the "$HOSTNAME" variable properly replaces with "db.example.com")

[root@xiaoya ~]# rpm -qa|grep percona-toolkit 

percona-toolkit-2.2.16-1.noarch

For pt-query-digest version < 2.2

pt-query-digest --user=anemometer --password=superSecurePass \

                  --review h=db.example.com,D=slow_query_log,t=global_query_review \

                  --review-history h=db.example.com,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

For pt-query-digest version >= 2.2

[root@xiaoya ~]# pt-query-digest --user=anemometer --password=123456 --review D=slow_query_log,t=global_query_review --history D=slow_query_log,t=global_query_review_history --no-report --limit=0% --filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\"$HOSTNAME\"" /usr/local/mysql/var/slow.log

You may see an error like above, that's okay! TODO: explain what the options above are doing.

Pipeline process 11 (aggregate fingerprint) caused an error: Argument "57A" isn't numeric in numeric gt (>) at (eval 40) line 6, <> line 27.

Pipeline process 11 (aggregate fingerprint) caused an error: Argument "57B" isn't numeric in numeric gt (>) at (eval 40) line 6, <> line 28.

Pipeline process 11 (aggregate fingerprint) caused an error: Argument "57C" isn't numeric in numeric gt (>) at (eval 40) line 6, <> line 29.

 

View the data!

Now, navigate to the document root of your web server and copy the sample config so you can edit it:

[root@xiaoya conf]# cd /home/wwwroot/anemometer/conf
[root@xiaoya conf]# cp sample.config.inc.php config.inc.php

The sample config explains every setting you may want to change in it. At the very least, make sure you set the Datasource to the MySQL database you're storing the analyzed digest information in:

$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'

    )

);

In addition, the "explain" plugin is enabled by default in the current release and you'll need to setup the username and password it uses to an account that has privileges to explain queries on a given schema on a host. For example, if you're digesting slow logs that primarily contain queries from the "world" database on db.example.com, you'll need to ensure that the user account you put into the following section of the config has the necessary privileges on the "world" database on db.example.com. To do this, scroll down in the sample config to the section containing the plugins configuration and change the 'user' and 'password' parameters to an appropriate account:

$conf['plugins'] = array(
        ...
    'explain'       =>      function ($sample) {
        $conn['user'] = 'anemometer';
        $conn['password'] = 'superSecurePass';
        return $conn;
    },
);

Finally,you can look through

http://10.0.0.5/anemometer/

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI