嗨, 大家好: 网站在新年后正式开通,欢迎大家加入我们,共同维护一个良好氛围的中国技术社区。 欢迎举报不良帖子,欢迎提供建议。
我们的QQ群:136102234,欢迎进群找答案,里边会有很多资深的大师们。 point overflow

针对mysql的线程kill时,发现大多数时候都会快速的kill掉, 但是某些时候会卡很久,是什么原因?

提问了 11-06 10:35:35

jkant's gravatar image

jkant ♦♦
11130137138
采纳率: 3%


原理:

当您进行一个KILL时,对线程设置一个特有的终止标记。在多数情况下,线程终止可能要花一些时间,这是因为终止标记只会在在特定的间隔被检查:

1.select 在group by 和order by 循环中,kill标志会在读取一个行块后检查,如果有,则语句被放弃。

2.alter

在copy表的时候,每一小部分从原表读取的时候定期检查标志。假如有,则语句取消和零时表被删除

该KILL语句返回时无需等待确认,但kill flag check会在相当短的时间内中止操作。中止操作中执行任何必要的清理也需要一些时间。

3.update/delete 在执行期间UPDATE或 DELETE操作期间,在每个块读取之后以及每个更新或删除的行之后检查终止标志。如果设置了kill标志,则语句将中止。如果您不使用事务,则不会回滚更改。

永久链接

已回答 11-06 10:36:07

jkant's gravatar image

jkant ♦♦
11130137138
采纳率: 3%

你的回答
切换预览

关注这个问题

邮件:

登录之后,你可以在这里订阅任何更新。

RSS:

回答

回答和评论

Markdown基本语法

  • *italic* or _italic_
  • **bold** or __bold__
  • 链接:[文本](http://url.com/ "标题")
  • 图片?![alt 文本](/path/img.jpg "标题")
  • 编号列表: 1. Foo 2. Bar
  • 如果想要换行,只需要在前一行结尾处插入2个空格即可。
  • 支持基本HTML标记

问题标签:

×72
×1
×1

已提出的问题: 11-06 10:35:35

问题浏览量: 50 次

最后更新: 11-06 10:36:07