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

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

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

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

3)查找重复的索引

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

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

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

percona-toolkit源自Maatkit 和Aspersa工具,这两个工具是管理mysql的最有名的工具,现在Maatkit工具已经不维护了,所以使用percona-toolkit吧!

一、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

二、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这个命令,其他命令还待解锁。

三、结合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这个文档

四、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语句耗时较长,从而进一步进行定位,看是否由于缺少索引等问题造成的耗时较长。

利用percona-toolkit定位数据库性能问题的更多相关文章

  1. 【操作教程】利用YCSB测试巨杉数据库性能

    一.前言 巨杉数据库(SequoiaDB)是国内第一款新一代文档型分布式数据库,巨杉数据库由巨杉软件完全自主研发,拥有完全自主知识产权,不基于任何其它的开源项目.SequoiaDB数据库是为分布式存储 ...

  2. 利用zabbix监控oracle数据库

    一.概述 zabbix是一款非常强大,同时也是应用最为广泛的开源监控软件,本文将给大家介绍如何利用zabbix监控oracle数据库. 二.环境介绍 以下是我安装的环境,实际部署时并不需要跟我的环境一 ...

  3. 如何利用火焰图定位 Java 的 CPU 性能问题

     常见 CPU 性能问题 你所负责的服务(下称:服务)是否遇到过以下现象: 休息的时候,手机突然收到大量告警短信,提示服务的 99.9 line 从 20ms 飙升至 10s: 正在敲代码实现业务功能 ...

  4. 转载:SqlServer数据库性能优化详解

    本文转载自:http://blog.csdn.net/andylaudotnet/article/details/1763573 性能调节的目的是通过将网络流通.磁盘 I/O 和 CPU 时间减到最小 ...

  5. 数据库性能优化:SQL索引

    SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开他的神秘面纱. 1.1 什么是索引? SQL索引有两种,聚集索引和非聚集索引 ...

  6. SQL索引一步到位(此文章为“数据库性能优化二:数据库表优化”附属文章之一)

    SQL索引一步到位(此文章为“数据库性能优化二:数据库表优化”附属文章之一) SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭 ...

  7. 数据库性能优化一:SQL索引一步到位

    SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开他的神秘面纱. 1.1 什么是索引? SQL索引有两种,聚集索引和非聚集索引 ...

  8. Mysql数据库性能优化(一)

    参考 http://www.jb51.net/article/82254.htm 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要 ...

  9. Percona Toolkit mysql辅助利器

    1 PT介绍 Percona Toolkit简称pt工具—PT-Tools,是Percona公司开发用于管理MySQL的工具,功能包括检查主从复制的数据一致性.检查重复索引.定位IO占用高的表文件.在 ...

随机推荐

  1. Spring框架引入

    Struts与Hibernate可以做什么事? Struts, Mvc中控制层解决方案 可以进行请求数据自动封装.类型转换.文件上传.效验… Hibernate, 持久层的解决方案: 可以做到, 把对 ...

  2. mysql delimiter的说明

    默认情况下,mysql解释器一遇到分号(;),它就要自动执行. 不会等到用户把这些语句全部输入完之后,再执行整段语句. 而自定义函数和存储过程的SQL语句有好多行,且语句中包含有分号,为了保证整段语句 ...

  3. 导入maven项目遇到中文乱码

    windows->preferences->content types->word Document 并输入utf-8->update; 右键选中的项目,选择propertie ...

  4. linux系统被ddos攻击识别

    通过查看dmesg日志信息,当存在大量如下 的信息,服务器开始响应缓慢并丢失正常的计数数据.这是典型的SYN Flood攻击(或开放半连接攻击). [ [ [ [ [ [ [ TCP洪水攻击(SYN ...

  5. ASP.NET MVC5+EF6+LayUI实战教程,通用后台管理系统框架(5)- 创建项目结构

    前言 关于理论知识,我的表达能力有限,知识水平有限,就不过多的讲解编程工作中的专用术语了,大家写的代码多了,自然就懂了 前几节课,我们看到了后台的主页面,以及一个自认为比较漂亮的登录界面,算是编程套路 ...

  6. [总结]多项式类数学相关(定理&证明&板子)

    目录 写在前面 前置技能 多项式相关 多项式的系数表示 多项式的点值表示 复数相关 复数的意义 复数的基本运算 单位根 代码相关 多项式乘法 快速傅里叶变换 DFT IDFT 算法实现 递归实现 迭代 ...

  7. VS2012 编译报错:找不到编译动态表达式所需的一个或多个类型。是否缺少引用?

    今天编译公司项目,原本项目是3.5,由于现在要用到dynamic ,把target 改为4.0 ,编译时 报错误  “找不到编译动态表达式所需的一个或多个类型.是否缺少引用?”,然后根据另一个提示排错 ...

  8. c#数据库设计--1、概述

    一.数据库设计的概念 数据库设计是将数据库中的数据实体及这些数据实体之间的关系,进行规划和结构化的过程. 二.数据库设计的重要性 设计决定代码量,一将不行,累死三军. 如果一个数据库没有进行一个良好的 ...

  9. EWS 邮件提醒

    摘要 之前做的邮件提醒的项目,最近需要优化,由于使用了队列,但即时性不是特别好,有队列,就会出现先后的问题,最近调研了exchange 流通知的模式,所以想使用流通知模式和原先的拉取邮件的方法结合,在 ...

  10. Java反射的好处

    反射的好处 我们在第一次接触反射的时候,总会有个很大的疑问,反射看起来好麻烦啊,各种get.get,他究竟有什么好处,能用来做什么呢? 我们先来看一下<编程思想>这本书中是怎么说的. RT ...