利用percona-toolkit定位数据库性能问题

当你的性能瓶颈卡在数据库这块的时候,能够经过percona-toolkit来进行问题定位。mysql

 

那么,首先,介绍下percona-toolkit。percona-toolkit是一组高级命令行工具的集合,用来执行各类经过手工执行很是复杂和麻烦的mysql和系统任务,这些任务包括:sql

 

1)检查master和slave数据的一致性数据库

 2)有效地对记录进行归档服务器

 3)查找重复的索引并发

 4)对服务器信息进行汇总tcp

 5)分析来自日志和tcpdump的查询工具

 6)当系统出问题的时候收集重要的系统信息性能

 

percona-toolkit源自Maatkit 和Aspersa工具,这两个工具是管理mysql的最有名的工具,如今Maatkit工具已经不维护了,因此使用percona-toolkit吧!spa

 

 

1、percona-toolkit工具包的安装命令行

 

1)  percona的安装十分简单,去percona的官网下载percona-toolkit:

 https://www.percona.com/downloads/percona-toolkit/

 

2)  在云主机中进行解压:tar -xvf percona-toolkit_2.2.15-2.tar.gz

3)  进入到解压后的目录 /percona-toolkit-2.2.16/bin 中,就有咱们须要的各类有用命令工具

4)  安装完成后,能够用如下命令来确认是否安装成功

 

# pt-query-digest --help

# pt-table-checksum –help

 

 

2、percona-toolkit命令使用说明

percona-toolkit有32个命令,能够分为7大类,详细见下表:

工具类别

工具命令

工具做用

备注

开发类

pt-duplicate-key-checker

列出并删除重复的索引和外键

 

pt-online-schema-change

在线修改表结构

 

pt-show-grants

规范化和打印权限

 

pt-upgrade

在多个服务器上执行查询,并比较不一样

 

性能类

pt-index-usage

分析日志中索引使用状况,并出报告

 

pt-pmp

为查询结果跟踪,并汇总跟踪结果

 

pt-visual-explain

格式化执行计划

 

pt-table-usage

分析日志中查询并分析表使用状况

pt 2.2新增命令

配置类

pt-config-diff

比较配置文件和参数

 

pt-mysql-summary

对mysql配置和status进行汇总

 

pt-variable-advisor

分析参数,并提出建议

 

监控类

pt-deadlock-logger

提取和记录mysql死锁信息

 

pt-fk-error-logger

提取和记录外键信息

 

pt-mext

并行查看status样本信息

 

pt-query-digest

分析查询日志,并产生报告

经常使用命令

复制类

pt-heartbeat

监控mysql复制延迟

 

pt-slave-delay

设定从落后主的时间

 

pt-slave-find

查找和打印全部mysql复制层级关系

 

pt-slave-restart

监控salve错误,并尝试重启salve

 

pt-table-checksum

校验主从复制一致性

 

pt-table-sync

高效同步表数据

 

系统类

pt-diskstats

查看系统磁盘状态

 

pt-fifo-split

模拟切割文件并输出

 

pt-summary

收集和显示系统概况

 

pt-stalk

出现问题时,收集诊断数据

 

pt-sift

浏览由pt-stalk建立的文件

pt 2.2新增命令

pt-ioprofile

查询进程IO并打印一个IO活动表

pt 2.2新增命令

实用类

pt-archiver

将表数据归档到另外一个表或文件中

 

pt-find

查找表并执行命令

 

pt-kill

Kill掉符合条件的sql

经常使用命令

pt-align

对齐其余工具的输出

pt 2.2新增命令

pt-fingerprint

将查询转成密文

pt 2.2新增命令

 本文中主要解锁了pt-query-digest这个命令,其余命令还待解锁。

 

 

 

3、结合tcpdump命令一块儿定位问题

 

1)  用tcpdump命令抓包,抓取须要操做数据的包,本文中以数据库地址为10.165.182.2:3306为例进行说明:

 

sudo tcpdump -s 65535 -x -nn -q -tttt -i any -c 100000 port 3306 > mysql.tcp.txt

 

2)  采用pt-query-digest分析查询日志,并产生报告: 

 

./pt-query-digest  --type tcpdump --watch-server  10.165.182.2:3306  ../../mysql.tcp.txt  > ~/sql.txt

 

3)  查看sql.txt这个文档

 

 

 

4、Percona的报告解读

 

上面第三部分的步骤2产生的percona的报告以下:

 

1.       整体统计结果,以下图

 

Overall: 总共有多少条查询,上例为总共3.33k个查询。

Time range: 查询执行的时间范围。

unique: 惟一查询数量,即对查询条件进行参数化之后,总共有多少个不一样的查询,该例为10。

total: 总计   min:最小   max: 最大  avg:平均

95%: 把全部值从小到大排列,位置位于95%的那个数,这个数通常最具备参考价值。

median: 中位数,把全部值从小到大排列,位置位于中间那个数。

Exec time:语句执行时间

Lock time:锁占有时间

Rows sent:发送到客户端的行数

Row examine:扫描的行数(SELECT语句)

Row affecte:发送改变的行数(UPDATE, DELETE, INSERT语句)

Bytes sent:发送多少bytes的查询结果集

Query size:查询语句的字符数

 

 

2.       查询分组统计结果,以下图

 

由上图可见,这部分对查询进行参数化并分组,而后对各种查询的执行状况进行分析,结果按总执行时长,从大到小排序。

Response: 总的响应时间。

time: 该查询在本次分析中总的时间占比。

calls: 执行次数,即本次分析总共有多少条这种类型的查询语句。

R/Call: 平均每次执行的响应时间。

Item : 查询对象

 

3.       第三部分:每一种查询的详细统计结果,以下图:

 

查询的详细统计结果,最上面的表格列出了执行次数、最大、最小、平均、95%等各项目的统计。

QPS:每秒查询数

concurrency:该查询的近似并发值

ID:16进制,查询语句的指纹,去掉了多余空格、和文本字符、转换成小写,使用--filter能够用来进行过滤

at byte 289141:查询语句在日志文件中的偏移量(byte offset),不必定精确,根据偏移量在日志文件中查找语句(如tail -c +289141 mysql-slow.201407250000 |head)

pct在整个日志文件中,执行语句占用百分比(91%),总计执行了3055次【本文中的数据】

Databases: 库名

Users: 各个用户执行的次数(占比)

Query_time distribution : 查询时间分布, 长短体现区间占比,本例中1s-10s之间查询数量是10s以上的两倍。

Tables: 查询中涉及到的表

 

Explain: 示例

因此能够经过这里的耗时来定位究竟是哪一个sql语句耗时较长,从而进一步进行定位,看是否因为缺乏索引等问题形成的耗时较长。

相关文章
相关标签/搜索