学习篇-mysql-优化04-pt-query-digest用法

文章目录

          • 一、pt-query-digest工具的简单使用
          • 二、使用pt-query-digest可以分析的三大类有问题的SQL

一、pt-query-digest工具的简单使用
  • 简介

    • pt-query-digest是用于分析mysql慢查询的一个第三方工具,它可以分析binlog、General log、slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的Mysql协议数据来进行分析。
    • 可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分析结果找出问题进行优化。
  • 安装

    • pt-query-digest本质是pert脚本,所以首先安装perl模块

      yum install -y perl-CPAN perl-Time-HiRes
      
    • 快速安装

      • 官网地址:https://www.percona.com/downloads/

      • 下载资源

        wget https://www.percona.com/downloads/percona-toolkit/3.2.0/binary/redhat/7/x86_64/percona-toolkit-3.2.0-1.el7.x86_64.rpm
        
      • 本地安装

        yum localinstall -y percona-toolkit-3.2.0-1.el7.x86_64.rpm
        
      • 检查是否安装完成

        pt-query-digest --help
        

        学习篇-mysql-优化04-pt-query-digest用法_第1张图片

    • 相关命令简单用法【这边的每一个命令都需要自己使用时去详细查看】

      • 查看服务器信息

        pt-summary
        

        学习篇-mysql-优化04-pt-query-digest用法_第2张图片

      • 查看磁盘开销使用信息

        pt-diskstats
        

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mTxjj36x-1597230962108)(../mysql-imgs/image-20200811191831615.png)]

      • 查看mysql数据库信息

        pt-mysql-summary --user=root --password=123456
        

        学习篇-mysql-优化04-pt-query-digest用法_第3张图片

        • 可以看到mysql相关的具体信息:有系统时间,数据库实例,msyql服务路径,主从信息等信息。
      • 分析慢查询日志

        // pt-query-digest xxx慢日志文件路径 
        // --limit=100% 查看所有记录
        // 总分模式,先描述总体信息,然后分条分析
        pt-query-digest /var/lib/mysql/xxx-slow.log
        
      • 查找mysql的从库和同步状态

        pt-slave-find --host=localhost --user=root --password=123456
        
      • 查看mysql的死锁信息

        // 将死锁信息放入库为test,表为deadlocks,用户root,密码123456
        pt-deadlock-logger --run-time=10 --interval=3 --create-dest-table --dest D=test,t=deadlocks u=root,p=123456
        
      • 从慢查询日志中分析索引使用情况

        pt-index-usage --user=root --password=123456 --host=localhost /var/lib/mysql/myshop02-slow.log
        
      • 查找慢查找数据库表中重复的索引

        pt-duplicate-key-checker --host=localhost --user=root --password=123456
        
      • 查看mysql表和文件的当前活动IO开销(不要在高峰使用)

        pt-ioprofile
        
      • 查看不同mysql配置文件差异(集群常用,双方都生效的变量)

        pt-config-diff /etc/my.cnf	/root/my_master.cnf
        
        • 用在集群中,主从复制或者出现问题排查,主机和从机差异的时候经常用到。
      • pt-find查找mysql表和执行命令

        // 查找数据库里大于1M的表
        pt-find --user=root	--password=123456 --tablesize +1M
        // 查找表和索引大小排序
        pt-find --user=root	--password=123456 --printf "%T\t%D.%N\n" | sort -rn
        

        学习篇-mysql-优化04-pt-query-digest用法_第4张图片

      • pt-kill杀掉符合标准的mysql进程

        // 显示查询时间大于3秒的查询
        pt-kill --user=root --password=123456 --busy-time 3 --print
        // 杀掉大于3秒的查询
        pt-kill --user=root --password=123456 --busy-time 3 --kill
        
      • 查看mysql授权(集群常用,授权复制)

        pt-show-grants --user=root --password=123456
        pt-show-grants --user=root --password=123456 --separate --revoke
        
      • 验证数据库复制的完整性(集群常用,主从复制后检验)

        pt-table-checksum --user=root --password=123456
        
  • 使用过程遇到的问题

    • 问题一:

      • DBI connect(’;;mysql_read_default_group=client’,‘test’,…) failed: Access denied for user ‘test’@‘localhost’ (using password: YES) at /usr/bin/pt-find line 323.

      • 解决方案:

        • 连接数据之后,更改

          // 重点:WITH mysql_native_password
          // username 就是数据库的用户名
          // ip_address 对应自己设置 可以是localhost 可以是ip 可以是%
          // password 密码
          ALTER USER 'username'@'ip_address' IDENTIFIED WITH mysql_native_password BY 'password';
          
        • 重新登录mysql,再次尝试相关命令

二、使用pt-query-digest可以分析的三大类有问题的SQL
  • 查询次数多且每次查询占用时间长的sql
    • 通常为pt-query-digest分析的前几个查询,该工具可以很清楚的看出每个SQL执行的次数及百分比等信息,执行的次数多,占比比较大的SQL
  • IO大的sql
    • 注意pt-query-digest分析中的Rows examine项,扫描的行数越大,IO越大
  • 未命中的索引的SQL
    • pt-query-digest分析中的Rows examine 和 Rows Send的对比。说明该SQL的索引命中率不高,对于这种SQL,我们要重点进行关注。

你可能感兴趣的:(mysql)