MySQL 中在运行一个 DDL , 此时我们对这个 DDL 进行 kill , 那这个 DDL 多久会被 kill 掉?..., 这里使用了我们之前写的脚本:
不需任何操作, 断点已经按我们的脚本添加好了
现在在 MySQL 中触发一个 alter :
找到我们指定的 gdb 日志文件:
可以看到里面密密麻麻的写满了堆栈信息,...这个堆栈不太容易识别: 这是整个 DDL 的外层操作, 只知道是重建索引 (之前两个堆栈也都是重建索引里的步骤)
找到该行最后, 标记了其代码位置为: row0merge.cc:4668 , 查看一下代码...翻一下官方文档, 对 kill 行为的描述如下:
可以看到 对于大批数据操作, MySQL 会在一部分数据处理后检查线程是否被 kill
我们的实验结论中, 1/2/4三个过程都涉及了大量数据的操作,...MySQL 将其分为若干部分, 在处理每一部分后进行检查也十分合理
需要注意的是: 对 DDL 进行 kill , 并不总能在合理的时间内触发: 比如对数据的处理变慢, 或者在堆栈3中 flush 变慢