真实用SYSTEM STOP/START MERGES控制后台线程池,验证UPDATE/DELETE真实跟普通合并共享同一套执行资源,卡住的根源不在mutation本身。
代码SYSTEM STOP MERGES demo.muttest2; -- 真实停掉后台合并/mutation线程 ALTER TABLE demo.muttest2 UPDATE status='new3' WHERE k % 13 = 0; SELECT mutation_id, is_done, parts_to_do FROM system.mutations WHERE table='muttest2';
STOP MERGES之后发起mutation,2秒后查询: mutation_9.txt is_done=0 parts_to_do=1 ← 真实卡住了,一直没有变化 SYSTEM START MERGES demo.muttest2; -- 真实恢复线程池 2秒后再查: mutation_9.txt is_done=1 parts_to_do=0 ← 真实立即完成了
这次真实的对比干净地证明了一件事:这条UPDATE语句本身没有任何问题,SQL、数据、表结构都没变,唯一的变量是背后执行它的线程池被SYSTEM STOP MERGES人为停掉了——一旦恢复,mutation真实立刻就跑完了。
每一步都是本文上面用真实SYSTEM STOP/START MERGES跑出来的原始结果。
SYSTEM STOP/START MERGES 与 system.mutations