mysql(六)-- linux离线安装pt-query-digest mysql 慢查询日志工具

linux 环境redhat 6.5 64位
1 安装说明
percona-toolkit为 DBA 提供了一些非常有用的性能诊断工具,其中就包括 pt-query-digest
percona-toolkit 安装需要 perl 的 DBD 和 DBI 模块支持,因此需要先安装这两个模块,
而 DBD又需要DBI的支持,因此安装顺序就是:DBI,DBD,percona-toolkit 一共需要准备的安装包有DBI-1.636.tar.gz //DBI-1.636.tar.gz 安装包可以从csdn 的网站上可以下载到,不一定是这个版本的也可以
DBD-mysql-4.038.tar.gz //DBD-mysql-4.038.tar.gz 安装包可以从csdn 的网站上可以下载到,不一定是这个版本的也可以
perl-TermReadKey-2.30-1.el5.rf.x86_64.rpm 安装包可以从csdn 的网站上可以下载到
percona-toolkit-2.1.1-1.noarch.rpm 安装包可以从csdn 的网站上可以下载到,或者是其他版本也是可以的
percona-toolkit-2.1.1.tar.gz 这个压缩包也是可以从安装包可以从csdn 的网站上可以下载到,或者是其他版本也是可以的
1) 安装DBI
# tar zxvf DBI-1.636.tar.gz
# cd DBI-1.636/
# perl Makefile.PL
# make && make install
2) 安装DBD
# tar zxvf DBD-mysql-4.038.tar.gz
# cd DBD-mysql-4.038/
# perl Makefile.PL
3)
rpm -ivh perl-TermReadKey-2.30-1.el5.rf.x86_64.rpm
rpm -ivh percona-toolkit-2.1.1-1.noarch.rpm4)
tar xzvf percona-toolkit-2.1.1.tar.gz
cd percona-toolkit-2.1.1
perl Makefile.PL
make && make install
5) // 不用这步骤也是可以的
pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog、General log、slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析。可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分析结果找出问题进行优化。pt-query-digest是一个perl脚本,只需下载并赋权即可执行。pt-query-digest包含在percona-toolkit里面,如果已经安装过percona-toolkit则可以直接使用(percona-toolkit安装方法请参考Linux系统中percona-toolkit的安装方法),下面是red hat 系统中pt-query-digest的单独安装方法
# yum install perl-DBI
# yum install perl-DBD-MySQL
# yum install perl-Time-HiRes
# yum install perl-IO-Socket-SSL
# chmod u+x pt-query-digest
在安装mysql成功以后
service mysqld staus 查看mysql的运行状态
service mysqld start 启动mysql
进入mysql 操作台
mysql>show variables;
查看 slow_query_log 把这个变量设置为ON
slow_query_log_file 的所对应的文件夹下才有mysqld-slow.log这个文件

测试pt-query-digest安装成功与否
# pt-query-digest /var/run/mysqld/mysqld-slow.log(slow_query_log_file的文件路径
注:mysql>show variables;查看你的slow_query_log_file 路径)
1)慢查询报告分析
 pt-query-digest使我们mysql中常用的对数据库性能分析一个非常重要的工具
我们通常可以通过命令#pt-query-digest  /var/run/mysqld/mysql-slow.log(慢查询日志的路径,不一定是这个,不同版本的linux路径应该是不一样的,这个路径可以通过命令mysql>show variables; 执行以后,slow_query_log_file这个变量对应的路径就是慢查询日志的路径,但是是在slow_query_log 为on 的条件下才可以,设置slow_query_log 为on 可以通过 mysql>set global slow_query_log = on;来设置) 执行以后可以出现如下的报告
pt-query-digest 查询报告分为三个部分:总体统计结果,查询分组统计结果(按照sql 的类型进行分类(我知道的,select update,insert,delete)),每一类sql的详细的统计图
第一部分:总体统计结果,如下图

属性说明:
1 Overall: 总共有多少条查询,上例为总共266个查询。从这份摘要中可以看出, 去掉重复(至于怎样才算是重复,下文会有介绍),有55条SQL 。
Time range: 查询执行的时间范围。
unique: 唯一查询数量,即对查询条件进行参数化以后(什么是进行参数化)总共有多少个不同的查询,该例为55。
95%: 把所有值从小到大排列,位置位于95%的那个数,这个数一般最具有参考价值。
median: 中位数,把所有值从小到大排列,位置位于中间那个数。
Exec time :执行时间
Lock time :锁的时间
Rows sent :总共查询的数据量
Rows examine :扫描行数的范围
Query size :查询量
总结可想而知:扫描量有225.02M但是实际上用到的查询量只有42.43k 两者相差甚远,就说明了一个问题,就是数据库的查询性能很差,就是我们只是用到了40多k的数据,但是要扫描的范围却达到了225.02M的范围
第二部分:查询分组统计结果,如下图

由上图可见,主要显示了最慢的一些sql从最慢到最快的来排序
属性说明:
Response:总的响应时间。
time: 该查询在本次分析中总的时间占比。
calls: 执行次数,即本次分析总共有多少条这种类型的查询语句。
R/Call: 平均每次执行的响应时间。
Item : 查询对象(实际上就是sql类型)
第三部分:每一种查询的详细统计结果,如下图:

由上图可见,12号查询的详细统计结果,最上面的表格列出了执行次数、最大、最小、平均、95%等各项目的统计。
Databases: 库名
Users: 各个用户执行的次数(占比)
Query_time distribution : 查询时间分布, 长短体现区间占比,本例中1s-10s之间查询数量是10s以上的两倍。
Tables: 查询中涉及到的表
Explain: 示例
这一部分显示了最慢的十六种类型的SQL 语句。
我这里最慢的是INSERT INTO u_search_record 共⋯有⋯1 82 条语句,虽然每次插入的数据都是不同的,
但也被归于同一类型的语句了。
4.用法示例
(1)直接分析慢查询文件:
pt-query-digest  slow.log > slow_report.log

(2)分析最近12小时内的查询:
pt-query-digest  --since=12h  slow.log > slow_report2.log
(3)分析指定时间范围内的查询:
pt-query-digest slow.log --since '2014-04-17 09:30:00' --until '2014-04-17 10:00:00'> > slow_report3.log
(4)分析指含有select语句的慢查询
pt-query-digest--filter '$event->{fingerprint} =~ m/^select/i' slow.log> slow_report4.log

(5) 针对某个用户的慢查询
pt-query-digest--filter '($event->{user} || "") =~ m/^root/i' slow.log> slow_report5.log

(6) 查询所有所有的全表扫描或full join的慢查询
pt-query-digest--filter '(($event->{Full_scan} || "") eq "yes") ||(($event->{Full_join} || "") eq "yes")' slow.log> slow_report6.log

(7)把查询保存到query_review表
pt-query-digest  --user=root –password=abc123 --review  h=localhost,D=test,t=query_review--create-review-table  slow.log
(8)把查询保存到query_history表
pt-query-digest  --user=root –password=abc123 --review  h=localhost,D=test,t=query_ history--create-review-table  slow.log_20140401
pt-query-digest  --user=root –password=abc123--review  h=localhost,D=test,t=query_history--create-review-table  slow.log_20140402

(9)通过tcpdump抓取mysql的tcp协议数据,然后再分析
tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 > mysql.tcp.txt
pt-query-digest --type tcpdump mysql.tcp.txt> slow_report9.log

(10)分析binlog
mysqlbinlog mysql-bin.000093 > mysql-bin000093.sql
pt-query-digest  --type=binlog  mysql-bin000093.sql > slow_report10.log

(11)分析general log
pt-query-digest  --type=genlog  localhost.log > slow_report11.log

猜你喜欢

转载自blog.csdn.net/qq_20610631/article/details/82052834