一、前言

前言就是本次无前言,好好学习吧~

二、正文

1.MySQL中的两个kill命令是什么?

  • kill query thread_id 和 kill connection thread_id

2.举出kill query命令的正向案例?kill query的原理是什么?为什么要发送信号量?

  • session A = begin; update t set c=c+1 where id = 1。session B = begin;update t set c=c+1 where id = 1 (blocked) 。session C = kill query thread_id。

  • 1)先将自身状态设置为thd::kill_query。2)发送信号量给当前thread。

  • session B 处于锁等待状态,如果只是把 session B 的线程状态设置 THD::KILL_QUERY,线程 B 并不知道这个状态变化,还是会继续等待。发一个信号的目的,就是让 session B 退出等待,来处理这个 THD::KILL_QUERY 状态。

3.举出kill connection命令的正向案例?为什么执行kill query 命令不能终止?kill connection原理是什么?在show processlist中线程状态是什么?对于这种情况怎么办?

  • 首先,执行 set global innodb_thread_concurrency=1,将 InnoDB 的并发线程上限数设置为 1;然后,执行下面的序列:session A = begin;  select sleep(1000) from t。session B = select * from t (blocked)。session C = kill query B (无效)。session D = kill connection B

  • 等行锁时,使用的是 pthread_cond_timedwait 函数,这个等待状态可以被唤醒。但是,例子里,1线程的等待逻辑是这样的:每 10 毫秒判断一下是否可以进入 InnoDB 执行,如果不行,就调用 nanosleep 函数进入 sleep 状态。

  • 1)把线程状态设置为 KILL_CONNECTION;2)关掉线程的网络连接。PS:因为有这个操作,所以你会看到,这时候 session B 收到了断开连接的提示。

  • killed。

  • 加大innodb_thread_concurrency数或者杀掉其他线程 让当前阻塞线程执行完成。

4.除了“线程没有执行到判断线程状态的逻辑”外还有什么情况导致kill不掉?Ctrl+C 命令原理?

  • 终止逻辑耗时较长,主要3种情况。1)超大事务kill,回滚操作需要对事务执行期间操作的所有新数据版本。2)执行DDL操作,尤其是到最后阶段。3)大查询的回滚,比如生成了比较大的临时表。

  • 由于 MySQL 是停等协议,执行 Ctrl+C 的时候,是 MySQL 客户端另外启动一个连接,然后发送一个 kill query 命令。

5.客户端的两个误解。

5.1.如果库里面的表特别多,连接就会很慢,这句话对?那什么原因造成的慢呢?如何避免慢?

  • 不对,每个客户端在和服务端建立连接的时候,需要做的事情就是 TCP 握手、用户校验、获取权限。但这几个操作,显然跟库里面表的个数无关。

  • 我们感知到的连接过程慢,其实并不是连接慢,也不是服务端慢,而是客户端慢。具体原因:当使用默认参数连接的时候,MySQL 客户端会提供一个本地库名和表名补全的功能。为了实现这个功能,客户端在连接成功后,需要多做一些操作:执行 show databases;切到 某个db 库,执行 show tables;把这两个命令的结果用于构建一个本地的哈希表。

  • 使用-A或者-quick就可以关掉这个自动补全的功能,然后客户端就可以快速返回了。

5.2.-quick是对服务端加速的参数?为什么会让服务端性能变慢?如果不是那么是怎么对客户端加速的?

  • 不是,启用-quick参数会让降低服务端性能。

  • MySQL 客户端发送请求后,接收服务端返回结果的方式有两种:1)一种是本地缓存,也就是在本地开一片内存,先把结果存起来。如果你用 API 开发,对应的就是 mysql_store_result 方法。2)另一种是不缓存,读一个处理一个。如果你用 API 开发,对应的就是 mysql_use_result 方法。PS:使用-quick就是采用第二种。

  • 1)跳过表名自动补全功能。2)使用本地缓存,缓存查询结果。3)不会把执行命令记录到本地的命令历史文件

三、课后题

问题:如果你碰到一个被 killed 的事务一直处于回滚状态,你认为是应该直接把 MySQL 进程强行重启,还是应该让它自己执行完成呢?为什么呢?

四、精彩评论

6.kill connection本质上只是把客户端的sql连接断开,后面的执行流程还是要走kill query的,此外就是show processlist的时候,kill connection会显示“killed”。

7.执行kill的时候没进InnoDB,不受这个innodb_thread_concurrency参数限制

32 | 执行MySQL遇到kill不掉语句分析(此时你慌不慌)相关推荐

  1. 生产mysql遇到kill不掉的sql的解决方法

    一.问题描述 今天上线,生产mysql有个2700万数据的大表lt_integral_detail_info,准备给这个表加字段.加索引: 执行加字段加索引的命令比较费时,结果这时有人对这个表执行了多 ...

  2. mysql内存爆_线上MySQL机器内存爆掉原因分析与解决

    现象: 阿里金融某业务的MySQL机器的内存每隔几天就会增长,涨上去后,却不下来.累积后内存爆掉. 分析: 此业务是间隔的对MySQL有大访问,其它时间几乎无访问.排查发现,内存涨时,一般会有MySQ ...

  3. Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)

    这篇文章主要介绍了Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)的相关资料,需要的朋友可以参考下 在使用mysql运行某些语句时,会因数据量太大而导致死锁,没有反映.这个时候, ...

  4. 执行mysql语句卡死

    问题:执行ALTER TABLE table1 ADD COLUMN name text(10) NOT NULL;时,sql语句卡住不动,如下图: 思路: 1.通过mysql日志查找原因,查log语 ...

  5. windows下bat处理执行Mysql的sql语句

    这篇文章主要介绍了windows下bat批处理执行Mysql的sql语句,需要的朋友可以参考下 有时候我们需要用bat来定时执行mysql那么就可以参考下面的代码 直接上代码: @ECHO OFF S ...

  6. MySQL探秘(二):SQL语句执行过程详解

    只有更加全面地了解SQL语句执行的每个过程,才能更好的进行SQL的设计和优化.  当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的.一旦理解了这一点,很 ...

  7. 【MySQL】一条查询语句在MySQL内部的执行过程

    我们几乎每天都在写SQL语句,当我们写了一条查询语句,会得到一个查询结果,但是它在MySQL内部是怎样的一个执行过程呢? mysql> select * from T where Id = 10 ...

  8. shell里执行执行mysql 语句

    shell里执行执行mysql 语句 #!/bin/sh mysql -uroot -p123456 databsename <<EOF select * from table; desc ...

  9. 通过php执行mysql语句进行学生成绩表的增删改查

    服务器:Apache 数据库:MySQL 通过php执行mysql语句进行增删改查,首先进行功能分析,需要写哪些执行文件,及其执行的功能: 1.index.php中:通过php执行sql语句获取数据库 ...

最新文章

  1. python下使用qrcode方法
  2. [BZOJ4811][Ynoi2017]由乃的OJ 树链剖分+线段树
  3. BZOJ 1691: [Usaco2007 Dec]挑剔的美食家( 平衡树 )
  4. 《算法竞赛进阶指南》打卡-基本算法-AcWing 94. 递归实现排列型枚举:dfs、二进制状态压缩
  5. Eclipse Neon 配置C/C++开发环境
  6. 手机卫星定位系统_70%手机已支持北斗却没感受到?下载个App查证下
  7. Java面向对象:对象的概念及面向对象的三个基本特征
  8. easymule学习----校验dll信息
  9. 查看opencv版本
  10. FlashFXP连接linux服务器(centos7环境)提示连接失败 (Unable to access SFTP sub-system, operation failed.)
  11. QRCode.js 生成二维码放大后会模糊的问题
  12. session跨域共享
  13. 吴忌寒革职詹克团,强势回归被称“矿圈乔布斯”
  14. qt中二维数组的使用_文件数据通过qt将二维数组中的像素点显示成一张图片
  15. windows插耳机没声音?
  16. 免费蹭WIFI要小心 别让你的账号“裸奔”
  17. 网络天才网页中文版_【网络天才网页版】网络天才最新中文网页版下载v2.2.3-街机中国...
  18. 如何使用Visual C进行画图
  19. linux服务器下数学软件下载,Linux下数学(科学)软件简介(一)
  20. VsCode tab 不能缩进

热门文章

  1. LOJ#6072. 「2017 山东一轮集训 Day5」苹果树 解题报告
  2. 告诉你在职场说话的八大技巧
  3. ESP32S3---智能手表简介
  4. 得了糖尿病就得戒水果?
  5. 监控任务是否超时,超时则结束任务
  6. js成员检查方式in、indexOf、includes、inArray
  7. 第五人格pcmac_第五人格原画风补丁包获取方法
  8. 广告内容定向分级,保护未成年人身心健康
  9. zookeeper简要梳理
  10. android项目 之 来电管家(3) ----- 添加与删除黑名单