最直接信号是CALL后无返回且SHOW PROCESSLIST中状态长期为Executing或Sending data、Time持续上涨需检查WHILE/REPEAT/LOOP的退出条件、变量初始化及NOT FOUND处理器作用范围。怎么发现存储过程卡在死循环里了最直接的信号是执行 CALL your_procedure() 后一直没返回同时 SHOW PROCESSLIST 里能看到该连接状态长期卡在 Executing 或 Sending data且 Time 值持续上涨比如 60 秒还在涨。注意不是所有长时间运行都等于死循环——但若逻辑简单比如只遍历几十行、无外部依赖不调远程、不等锁却耗时上百秒大概率是循环没出口。检查过程体里所有 WHILE、REPEAT、LOOP 结构确认每个都有明确的 LEAVE 或 ITERATE 触发条件特别警惕用 SELECT ... INTO 赋值后判断是否 NULL 退出的场景如果查询没结果变量保持上一次值不是 NULL条件永远不成立DECLARE CONTINUE HANDLER FOR NOT FOUND 不会中断循环本身只是跳过下一条语句别误以为它能“跳出循环”如何安全地 kill 正在跑的存储过程不能直接 KILL CONNECTION 所有情况都适用——如果过程正在写事务、加表锁或调用外部函数暴力中断可能留下未提交事务或元数据不一致。优先用 KILL QUERY 尝试中断当前语句只有确认无事务风险比如过程全程只读、或已知在空循环中才用 KILL CONNECTION。先查进程SHOW PROCESSLIST 找到对应 ID看 User、Host、Info 字段交叉验证尝试温和中断KILL QUERY 1234512345 是 ID观察是否退出若仍卡住再 KILL CONNECTION 12345杀完立刻查 information_schema.INNODB_TRX确认没有残留的 trx_state RUNNING 记录为什么加了 LOOP 却没进循环体常见于 REPEAT ... UNTIL 和 WHILE ... DO 的条件判断时机差异前者是“先执行、再判断”后者是“先判断、再执行”。如果初始条件就不满足WHILE 一次都不进而 REPEAT 至少进一次。 知网AI智能写作 知网AI智能写作写文档、写报告如此简单