运行平稳的数据库,如果遇到CPU狂飙,那很大可能就是慢SQL出现了。DBA首先要保证的是,数据库别跑挂了,所以我们要把那些运行慢的SQL杀死并记录到文件里,以便后面的排查。对于OLTP型业务,主库SELECT类SQL执行不允许超过1s才是合理的;那么对于超过1s的SQL或者对微延迟可以接受查询,理应在从库或者多源库上执行。

那么Percona Tools工具包中也提供了这么一个可以帮你解决这类问题的工具,就是pt-kill。此工具提供了超多选项,其原理就是连接到MySQL并从SHOW PROCESSLIST获取查询并进行过滤,然后执行kill或print动作。需要注意一点的是,在使用pt-kill时,有许多特殊规则要遵循,例如“不要杀死复制线程”,所以要小心不要杀死重要的连接。默认会过滤掉复制线程,请不必担心杀掉复制线程。

其实使用pt-kill大多数情况下,只是想为我们干掉超过一定阈值的SELECT查询并且打印出来(存储到文件或者数据库中),对于DML或者DDL并没有这方面的需求。对于被干掉的SQL可以再做一定的处理,比如报警给相关研发,督促业务改进。

下面是一个以不区分大小写,且以select为前缀的过滤条件来做超时kill。

$ pt-kill \

--host=10.10.0.109 \

--port=3306 \

--user=root \

--password=123456 \

--busy-time 5 \

--match-command="Query|Execute" \

--ignore-user="system user" \

--match-info="(?i-xsm:^(select))" \

--victim all \

--interval 1 \

--kill \

--ignore-self \

--print \

--log=/tmp/pt-kill.log

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

$pt-kill\

--host=10.10.0.109\

--port=3306\

--user=root\

--password=123456\

--busy-time5\

--match-command="Query|Execute"\

--ignore-user="system user"\

--match-info="(?i-xsm:^(select))"\

--victimall\

--interval1\

--kill\

--ignore-self\

--print\

--log=/tmp/pt-kill.log

简单介绍一些相关参数,关于更多详细的参数说明还是看官方网站吧。

批次查询已运行的时间超过这个时间的线程;这里的批次是指pt-kill支持分组处理,如果没有分组那么这里的时间就是单个线程运行的时间。

--match-command

过滤匹配SHOW PROCESSLIST对应的Command字段相关状态的进程,常见状态有Query、Sleep、Binlog Dump、Connect、Delayed insert、Execute、Fetch、Init DB、Kill、Prepare、Processlist、Quit、Reset stmt、Table Dump。与此选项对应的还有--ignore-command,顾名思义就是匹配相关状态的进程。

--ignore-user

过滤忽略User字段相关用户的进程。与此选项对应的还有

--match-info

过滤匹配Info字段相关的进程,可以使用select、update、insert、delete来进行匹配,并可使用”|”进行多项匹配,如”select|SELECT|delete|DELETE|update|UPDATE”。

默认严格所有选项都是严格区分大小写,但是通过指定像(?i-xsm:select)这样的正则表达式模式可以使它们不区分大小写,以我上面这种模式写的正则规则 (?i-xsm:^(select))表示的就是不区分大小写,且以不区分大小写的select开头的查询才匹配。

--daemonize

在后台以守护进程的方式运行。

--victim

用来决定kill那种线程, 默认值为oldest,只杀最老的查询(最先发起的)。这是防止被查杀是不是真的长时间运行的查询,他们只是长期等待。这种匹配按时间查询,杀死一个时间最高值。值为all表示杀掉所有满足的线程;值为all-but-oldest表示杀死所有,但时间最长的保留不杀。

--interval

运行检查query的间隔时间,可以根据实际情况调整。如果不加,只执行一次;加上的话,会在后台不停的执行。

--print

打印满足条件的语句。

--kill

杀死满足条件的语句。加了print后,并且会把杀死的SQL打印出来。

--log

存储满足条件的SQL语句,无论是被kill的还是print的。

最后有个问题没解决,使用发现对于Execute状态的查询pt-kill无法生效,对Query状态的没有问题。目前还不知道什么问题,有知道的麻烦告知一下,谢谢。

也就是这个问题,导致我没法真正使用pt-kill工具。然后自己参考pt-kill使用Python写了一个类似的工具,支持多线程,暂时命名为py-kill,哈哈。代码https://github.com/dongwenpeng/py-kill,需要的可以简单定制化一下。

如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。

mysql pt kill脚本_使用pt-kill为MySQL保驾护航相关推荐

  1. c语言连接数据库例子,c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual help).doc...

    这是精心收集的精品经典资料,值得下载保存阅读! c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual h ...

  2. mysql镜像压缩包使用_如何连接docker的mysql镜像

    展开全部 推荐使用Dockerfile方式. 服务的管理使用的是supervisord, 因为dockerfile里只会有一个cmd生效,如果我想62616964757a686964616fe5868 ...

  3. mysql kill 脚本_批量 kill mysql 中运行时间长的sql

    以下内容来自mysql手册: 13.5.5.3. KILL语法 KILL [CONNECTION | QUERY] thread_id 每个与mysqld的连接都在一个独立的线程里运行,您可以使用SH ...

  4. mysql 设置中文 重启_如何启动/停止/重启MySQL + 进入MYSQL-Go语言中文社区

    Ubuntu 如何启动/停止/重启MySQL 一. 启动方式 1.使用 service 启动:service mysql start 2.使用 mysqld 脚本启动:/etc/inint.d/mys ...

  5. ubuntu安装mysql 密码忘了怎么办_在ubuntu上面安装mysql都密码忘记及一些常用命令...

    重改密码! # /etc/init.d/mysql stop # mysqld_safe --user=mysql --skip-grant-tables --skip-networking & ...

  6. mysql实现心跳表_第29问:MySQL 的复制心跳说它不想跳了

    问题 最近年底,大家的数据库经常跑批量大事务,会发现复制突然断开,报错"心跳与本地信息不兼容": 会是什么原因? 实验 我们先来复现一下,再进行分析. 宽油,做一对主从数据库: 我 ...

  7. mysql 2003报错_为什么不建议在 MySQL 中使用 UTF-8?

    正文 记得去年我在往MySQL存入emoji表情 时,一直出错,无法导入.后来找到办法 -- 通过把 utf8 改成 utf8mb4 就可以了,并没有深究. 一年后,我看到一篇文章讲到emoji文字占 ...

  8. mysql子查询缺点_[慢查优化]慎用MySQL子查询,尤其是看到DEPENDENT SUBQUERY标记时

    它的执行计划如下,请注意看关键词"DEPENDENT SUBQUERY": id  select_type         table   type            poss ...

  9. mysql unicode转汉字_如果有人问你 MySql 怎么存取 Emoji,把这篇文章扔给他

    01.前言 Emoji 在我们生活中真的是越来越常见了,几乎每次发消息的时候不带个 Emoji,总觉得少了点什么,似乎干巴巴的文字已经无法承载我们丰富的感情了.对于我们开发者来说,如何将 Emoji ...

  10. c 对一个mysql数据库进行操作_用C语言操作MySQL数据库

    函数 描述 mysql_affected_rows() 返回上次UPDATE.DELETE或INSERT查询更改/删除/插入的行数. mysql_autocommit() 切换autocommit模式 ...

最新文章

  1. my understanding for love
  2. 02/03_Pytorch安装、Conda安装Pythorch,换源、pytorch官网、验证、安装jupyter、卸载、安装、启动jupyter、配置Jupyter notebook、使用
  3. AlwaysOn 2016 新特性和提升
  4. 炒菜机器人放食材的顺序_珠江新城有了首家机器人餐厅,40多台机器人提供服务...
  5. Centos启动卡住,starting auditd: [failed]
  6. python词云有什么用_使用Python定制词云
  7. 7-2 jmu-Java-02基本语法-05-浮点数的精确计算 (1 分)
  8. SPS :SPS 2003 安装过程中的语言版本问题。
  9. 全网最好用的VS Code插件推荐
  10. POJ 1190 生日蛋糕 DFS
  11. ubuntu 添加删除源
  12. CNware防DDOS攻击介绍--云宏
  13. 程序员因为写了一段爬虫代码,全公司200人被警察一锅端!
  14. Android开发常见问题汇总
  15. 火线安全:Log4j2 史诗级漏洞波及全球6万+开源软件
  16. HTML与CSS学习
  17. 微信开发服务器地址url怎么写,微信开发(一)URL配置
  18. 在网页中点击链接就可以和在线好友QQ聊天
  19. ShaderGUI的学习
  20. HTML旅游网页设计制作 DW旅游网站官网滚动网页 DIV旅游风景介绍网页设计与实现...

热门文章

  1. 基于STM32+UCOS的智能车载终端系统总结
  2. 实例讲解基于 React+Redux 的前端开发流程
  3. c语言海明校验码编码,海明校验码的编码规则有哪些?
  4. Raft 共识算法1-Raft基础
  5. 如何给mac重做系统
  6. 网络安全进阶篇(十一章-7)APP渗透测试篇(下)
  7. js将一串数字1607222406转换为日期格式
  8. C# 操作通过word模板合并N个word文档
  9. Android获取硬件设备详细信息
  10. 在手机屏幕上移动APP的两种方式