暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL运维工具使用介绍

IT那活儿 2023-03-08
702

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!




percona-toolkit工具



1. percona-toolkit介绍

percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的 mysql 任务和系统任务,本次讲解常用的pt-kill和pt-query-digest两种工具的使用方法。

2. percona-toolkit软件安装

一般直接用yum安装即可。

yum install perl-DBI perl-DBD-MySQL




pt-kill工具



1. 工具介绍

pt-kill 是一个很实用的查杀mysql线程和查询的工具,主要是为了快速找到并kill掉一些长时间占用数据库及系统资源导致业务受影响的复杂语句。

2. 常用参数

常用参数

含义

--user

用户

--password

密码

--port

端口

--host

主机

--socket

本地套接字

--match-command

匹配状态

--match-info

匹配信息

--match-state 

匹配声明

--ignore-host/--match-host

匹配主机

--ignore-db/--match-db

匹配数据库

--ignore-user/--match-user

匹配用户

--kill

杀掉连接并且退出

--kill-query

只杀掉连接执行的语句,但是线程不会被终止

--print

打印满足条件的语句

--busy-time

SQL运行时间的线程

--idle-time

sleep时间的连接线程,必须在--match-command sleep时才有效

--interval

query的间隔

--victim   

oldest|all|all-but-oldest 针对范围

--daemonize

是否放到后台执行

--interval

执行频率(s=seconds, m=minutes, h=hours, d=days)

--log-dsn D=test,t=pk_log 

记录信息到表中


3. 应用案例

1)杀掉空闲链接sleep 5秒的 SQL 并打印日志

杀掉空闲链接sleep 5秒的 SQL 并把日志放到/app/teledb/pt-kill.log文件中
/usr/bin/pt-kill --user=test --password=test -S 
/app/test/socket_3306/mysql_3306.sock --match-command Sleep
--idle-time 5 --victim all --interval 5 --kill --daemonize
--pid=/tmp/ptkill.pid --print --log=/app/teledb/pt-kill.log &

2)杀运行时间超过10s的SQL语句但保留线程,并打印日志

pt-kill --user=test --password=test -S 
/app/test/socket_3306/mysql_3306.sock --busy-time=10 --
victims all --print --kill-query

3)查杀select大于20s的会话

pt-kill  --user=test --password=test -S 
/app/test/socket_3306/mysql_3306.sock--match-info
"select|Select|SELECT"  --print --victims all --busy-time 20s

其他用法可按需求根据参数配置自行测试使用。

4)建议

如果要对生产数据库部署pt-kill工具,一定要与业务方沟通确认相关策略,并将查杀结果日志记录下来,定期推送kill掉的SQL给相关人员,避免影响正常生产SQL的执行。




pt-query-digest工具



1. 工具介绍

帮助分析查询慢查询日志,并产生一个查询报告,可以为 MySQL、 PostgreSQL、memcached 过滤、重放或者转换语句,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析。

2. 常用参数

常用参数

含义

--create-review-table

当使用--review参数把分析结果输出到表中时,如果没有表就自动创建

--create-history-table

当使用--history参数把分析结果输出到表中时,如果没有表就自动创建

--filter

对输入的慢查询按指定的字符串进行匹配过滤后再进行分析

--limit

限制输出结果百分比或数量,默认值是20,即将最慢的20条语句输出

--host

mysql服务器地址

--user

mysql用户名

--password

mysql用户密码

--history

将分析结果保存到表中,分析结果比较详细,下次再使用--history时,如果存在相同的语句,且查询所在的时间区间和历史表中的不同,则会记录到数据表中,可以通过查询同一CHECKSUM来比较某类型查询的历史变化

--review

将分析结果保存到表中,这个分析只是对查询条件进行参数化,一个类型的查询一条记录,比较简单。当下次使用--review时,如果存在相同的语句分析,就不会记录到数据表中

--output

分析结果输出类型,值可以是report(标准分析报告)、slowlog(Mysql slow log)、json、json-anon,一般使用report,以便于阅读

--since

从什么时间开始分析,值为字符串,可以是指定的某个”yyyy-mm-dd (hh:mm:ss)”格式的时间点,也可以是简单的一个时间值:s(秒)、h(小时)、m(分钟)、d(天),如12h就表示从12小时前开始统计。

--until

截止时间,配合—since可以分析一段时间内的慢查询


3. 应用案例

1)直接分析慢查询文件

pt-query-digest app/test/mysql/log/mysql-slow.log | more

2)针对某个用户的慢查询

pt-query-digest --filter '($event->{user} || "") =~ m/^root/i' app/test/mysql/log/mysql-slow.log

4. 分析输出结果

第一部分:总体统计结果

从左往右依次代表:

执行时间:
运行工具的主机名:
文件路径:
语句总数量,唯一的语句数量,QPS,并发数:
日志记录的时间范围:
属性:

从上到下依次代表:

  • 语句执行时间;
  • 锁占用时间;
  • 发送到客户端的行数;
  • select语句扫描行数;
  • 查询的字符数。

第二部分:查询分组统计结果

  • Rank:所有语句的排名,默认按查询时间降序排列
  • Query ID:sql ID;
  • Response:总响应时间;
  • time:该查询在本次分析中总的时间占比;
  • calls:执行次数,即本次分析总共有多少条这种类型的查询语句;
  • R/Call:平均每次执行的响应时间;
  • V/M:响应时间Variance-to-mean的比率;
  • Item:查询对象。

第三部分:每种查询的详细统计分析

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

  • ID:查询的ID号,和上图的Query ID对应;
  • Databases:数据库名;
  • Users:各个用户执行的次数(占比);
  • Query_time distribution :查询时间分布, 长短体现区间占比;
  • Tables:查询中涉及到的表;
  • Explain:SQL语句。

在生产环境中,可根据输出的慢 SQL 详情进行合理的语句调整

END


本文作者:吴航舟(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论