MySQL使用Kill命令杀死/清理慢连接

阅读: 评论:0

MySQL使用Kill命令杀死/清理慢连接

MySQL使用Kill命令杀死/清理慢连接

前面的文章中,已经讲过如何用processlist,获取慢连接和分析连接。

MySQL性能分析 - (二) processlist使用及重要指标说明

这里分享下用Kill清理发现的慢连接。

文章目录

    • 命令简介
    • 批量操作
    • 注意

命令简介

登录mysql,执行kill id,id通过processlist获取。

kill指令有两个可选参数,CONNECTIONQUERY,默认是CONNECTION

官方文档说明:

  • KILL CONNECTION is the same as KILL with no modifier: It terminates the connection associated with the given processlist_id, after terminating any statement the connection is executing.
  • KILL QUERY terminates the statement the connection is currently executing, but leaves the connection itself intact.

简单来说,CONNECTION选项会删除连接,而QUERY选项连接会保留、但停止SQL执行进入休眠。

如果服务使用的是数据库连接池、长连接,如果在CONNECTION模式下,kill了大量的链接,因为连接池链接并不会马上释放,很可能导致连接池突然超限、拿不到链接。 因此kill后通过重启或其他手段,重建连接池中的链接。

批量操作

一旦发生拥堵,往往要kill的SQL可能几十上百,手工效率比较低,有条件的可以自己搭建一个数据库控制台(阿里云rds控制台就支持批量kill,以前也是用开源phpadmin管理的),或者有批量处理的脚本。
之前写过简单的shell脚本来处理批量kill,下面贴上关键的部分:

threshold=$1
## ... 省略代码[判断阀值为空] ...slow_log=$baseDir/snapshot/slow.log
sql_conf="SELECT id,db,command,state,time,info FROM information_schema.processlist where command <> 'sleep' and time > "$threshold" order by time desc;"
## ... 省略代码[解析db配置] ...for id in $(mysql -h${host} -u${user} -p${password} -se  "$sql_conf" | awk '{print $1;print $0>>"'$slow_log'"}');doecho "kill "$idmysql -h${host} -u${user} -p${password} -e "kill $id"
done## ... 省略代码[处理通知等] ...

思路很简单,查询出数据库中超过某个阀值的链接,然后轮询链接id、执行kill
编写脚本时有几个要点:

  • 传入阀值,需要设置保护性的默认值,避免误操作将延时太低的sql误杀掉
  • 脚本需要增加并发控制,避免多人操作;
  • kill动作一定要留下记录、链接快照,这样后面才能分析慢SQL并根本解决问题。
    • 可以简单用文件日志记录
    • 如果要通知,可以采用发送邮件的方式。可参考《Linux上Python给多人发送邮件(Python2/Python3写法不同,使用SMTP协议)》

注意

如果发现被Kill连接处于Killed状态,说明该连接已成功设置了中止标识位。但因为SQL执行了比较耗时的操作,Kill后需要回滚事务和资源,所以需要一段时间。
此时如果有DDL操作,会看到Waiting for table metadata lock类似状态。

MySQL连接状态,可参考《MySQL processlist的state属性详解》


以上。感谢您的阅读。

本文发布于:2024-02-01 06:32:11,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170674033134572.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:命令   MySQL   Kill
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23