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


    当你的性能瓶颈卡在数据库这块的时候,可以通过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语句耗时较长,从而进一步进行定位,看是否由于缺少索引等问题造成的耗时较长。

  • 相关阅读:
    js的6种继承方式
    将数组分割成指定长度的小数组
    input file样式美化
    css伪类和伪元素的区别,:before和::before的区别
    css实现垂直居中
    css实现中间文字,两边横线效果
    css中:not()选择器和jQuery中.not()方法
    jQuery中判断input的disabled属性
    jQuery中判断input的checked属性
    HMTL label标签
  • 原文地址:https://www.cnblogs.com/DataArt/p/10230105.html
Copyright © 2020-2023  润新知