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

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

asked 2018-11-06 10:35:35

jkant's gravatar image

jkant ♦♦
11135138139
accept rate: 3%


原理:

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

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

2.alter

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

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

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

link

answered 2018-11-06 10:36:07

jkant's gravatar image

jkant ♦♦
11135138139
accept rate: 3%

Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "Title")
  • image?![alt text](/path/img.jpg "Title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Tags:

×72
×1
×1

Asked: 2018-11-06 10:35:35

Seen: 488 times

Last updated: 2018-11-06 10:36:07