记一次处理生产同事使用MySQL8存储过程进行数据计算,各种笛卡尔积产生了大量中间数据,一个单表数据就超过了180GB,因为这张表的处理超时,事务死锁,导致整个依赖这个中间数据表的下游任务均受影响,生产上紧急处理这张表带来的问题,挑战删除这张大表。
建立硬链接
找到MySQL的数据文件中这张表对应的数据文件,假设表名是test,数据文件对应的是test.frm和test.ibd,通过查看test.ibd文件大小已经超过180GB,这就是这张表无法直接drop的原因。
在这个文件夹下,为test.frm和test.ibd分别建立硬链接
1 | ln test.frm test.frm.h |
成功建立两个文件的硬链接
删除表
在MySQL中使用DROP 命令删除表
1 | DROP TABLE test; |
这时候删除非常快,立马就能删除完成
删除硬链接文件
删除硬链接文件,test.frm.h和test.ibd.h
1 | rm -rf test.frm.h |
这样就完成了大表的删除