我们有一个 MariaDB 长时间运行的进程(40 小时),所以我终止了该线程。但是,线程仍然存在,其中:
- 显示
Command
为Killed
。 - 一个。
State
_Unlocking tables
Info
是insert into ...
这是什么意思?更重要的是,我该如何摆脱它?自线程进入“已终止”状态以来已经超过 31 小时。
更新:我们重新启动了运行 MariaDB 的容器。没有任何迹象表明有任何问题,但是......将这个线程重铸为现在关于如何检查数据库中的错误是否有意义(我的 MariaDB 技能是初级的)或者我应该开始一个新线程?
该进程在被杀死后撤消其更改(这就是为什么在长时间运行的事务上杀死写进程可能很危险 - 它可能导致长时间的撤消进程阻塞)。
经验法则是 InnoDB 的 UNDO 可能会花费其写入时间的数倍。如果它不可持续,您可以在没有更多写入活动时停止服务器并重新启动它以跳过挂起的 UNDO(因此它不会再次启动)。这是通过 start 选项完成的:
作为正常启动选项并不理想,因为它可能会使您丢失数据。在不干净的重新启动(或一般情况下)之前生成备份始终是一个好主意,即使在技术上是安全的,假设没有其他写入或撤消正在进行。