我们现在刚刚在一个有54个MM行的mysql表上运行了一个删除查询。 查询应该删除大约40 MM的logging。 它运行了大约2个小时,之后表状态没有改变。 show table status仍然显示与运行删除查询之前相同的行数。 表引擎是InnoDb。
现在桌子几乎不能用了。 简单的select查询挂在该表上。 任何想法可能会出错?
根据问题中的小信息提出一些想法和参考:
- 你说它跑了2个小时。 它是否真的完成了删除操作,没有错误信息或工作仍在运行? 如果它仍在运行,它可能解释为什么SELECT查询挂起。 如果它仍然在运行,我只是让它在第二天运行,除非需要立即使用数据库(考虑完成恢复所需的时间)。
- 检查你的MySQL错误日志中是否有相关的消息。
- 你有DELETE操作之前的备份吗? 如果不是这样,那么在开始摆弄事物之前总要有一个备份,这是一个教训(我必须经历一个艰难的教训)。
- 查看关于删除速度和删除语法的MySQL页面,获取有关获取更快删除操作的众多技巧。
- 删除时,先尝试禁用表格上的所有索引,然后删除,然后重新生成。
- 尝试一次删除较less的行。
- 而不是删除44M行复制所需的14M行到一个新的表,删除旧的表,重命名新的表。