4 mysql myisam optimization hang
我有一个奇怪的情况,mysql OPTIMIZE 查询永远不会结束。Killinh 后,它仍处于“killed”状态。
重现场景:
我有一个包含 40MB 数据和 1500 条记录的表。当 myisam_repair_threads 设置为 1 时,OPTIMIZE 将在一秒钟内完成。将 myisam_repair_threads 设置为 2 需要很长时间才能完成。终止查询后,它仍处于“已终止”状态(在撰写本文时已经 3 小时了)。看来这是mysql的一个bug。
然而,最大的问题是:我怎样才能强制终止这个查询?它当前持有表元数据的锁,因此某些进程无法执行,因为它们正在等待该锁。
任何建议表示赞赏!
小智 5
\n\n\n当你运行 KILL 时实际上会发生什么?
\n命令 sytnax 是 KILL [QUERY | CONNECTION] <thread_id>,其中thread_id 是进程列表输出的第一列的值。可选参数确定是仅运行查询还是终止整个会话。默认为后者,因此\n不需要指定 CONNECTION。
\n除了在选定线程内设置特殊标志之外,运行该命令实际上不会执行任何操作。因此,kill\n操作不会与相应的请求同步发生。\n在许多情况下,线程或查询需要一些时间才能停止。在语句执行的各个阶段都会检查\n标志。它何时发生或发生的频率取决于线程实际执行的工作。
\n
...
\n\n\n无论真正的原因是什么,都不可能在不重新启动数据库的情况下摆脱\n此类挂起的线程。然而,他们应该被允许自行离开。
\n也没有办法像Unix系统中的kill -9那样强制立即执行kill。
\n