MySQL大表删除正确的姿势
admin
2023-05-15 21:42:15
0

1、背景

在生产环境有可能有删除某个不重要大表的需求,因为大表占用的大量磁盘空间,如果我们直接drop掉此表,通常需要20秒以上的时间,总会觉得会卡主MySQL,现在给大家一个正确的删除姿势。

2、首先我们查看此大表

shell>ls log_api_call_01_01* -l

-rw-r----- 1 mysql mysql   9362 Jun 22 15:35 log_api_call_01_01.frm

-rw-r----- 1 mysql mysql 293334036112 Jun 22 15:38 log_api_call_01_01.ibd

shell>ln log_api_call_01_01.ibd log_api_call_01_01ibd.bak

shell>ls log_api_call_01_01* -l

-rw-rw—- 1 MySQL mysql 9362 Apr 14 23:03 log_api_call_01_01.frm

-rw-r----- 1 mysql mysql 293334036112 Jun 22 15:38 log_api_call_01_01.ibd

-rw-r----- 1 mysql mysql 293334036112 Jun 22 15:38 log_api_call_01_01.ibd.bak

mysql>drop table log_api_call_01_01;

Query Ok, 0 rows affacted(0.92 sec)

通过这样的操作,可以减少mysql drop大表hang住的时间,然后在业务低峰期再去删除真实的那个*.b文*.bak件。


至于原理: 

就是利用OS HARD LINK的原理,

当多个文件名同时指向同一个INODE时,这个INODE的引用数N>1, 删除其中任何一个文件名都会很快.

因为其直接的物理文件块没有被删除.只是删除了一个指针而已;

当INODE的引用数N=1时, 删除文件需要去把这个文件相关的所有数据块清除,所以会比较耗时;


对于大表操作操作的其实几个Tips:

可以先用rename table替代drop table

mysql> rename table log_api_call_01_01 to log_api_call_01_01_bak;

删除物理文件

for i in `seq 100 -1 1 ` ;do sleep 2;sudo truncate -s ${i}G /data/mysql/manager/log_api_call_01_01.ibd.bak;done sudo rm -rf /data/mysql/manager/log_api_call_01_01.ibd.bak;

这个动作也很快只是相当于改一个文件名。

另外也可以考虑使用XFS文件系统,对于Drop表动作也比较快。


相关内容

热门资讯

网传“三大运营商即将免月租”,... 最近,大家在各大社交平台都可能刷到过这样一条消息——三大运营商即将全面推出免月租、按量计费套餐。有不...
今年20岁的老剧,多少年轻人还... “20年快得很,弹指一挥间。”20年来,相关讨论和衍生创作不断,甚至还有一批批新生代观众陆续“搬进”...
总书记引领强国之路|聚天下英才... 原标题:学习新语·总书记引领强国之路|聚天下英才而用之
燃气灶开大火嘀一声熄灭怎么回事 可能是因为电池没电了,解决方法就是换掉燃气灶的电池,然后检查出现故障的那头,观察中间的火焰是否可以燃...
冰箱冷冻风扇异响怎么办 原因可能是冰箱的弹力垫圈存在相应的损坏,要进行弹力垫圈的更换也可以降低冰箱的工作噪音;原因可能是风扇...
美的空调发出哒哒哒的异响是怎么... 以美的空调为例,空调发出哒哒哒的异响的原因大致有四种,具体原因及解决方法如下所示: 1、有可能是因...
油烟机电机异响无力的原因 油烟机是厨房中的必备家电之一,其主要功能是抽取烹饪过程中的烟雾和油蒸气。油烟机电机是其重要组成部分,...
冰箱冷藏的风扇异响怎么办 原因可能是冰箱风扇处有异物,可以通过清除异物的方法来解决。原因可能是冰箱风扇风机润滑不良,可以通过添...
特朗普松口:可接受伊朗暂停核计... 据凤凰卫视报道,结束访华行程的美国总统特朗普,5月15日在空军一号上,被问到是否已拒绝伊朗提出的最新...
德国总理,你这句话够狠 不得不说,德国总理默茨这句话,够狠够生猛。曾几何时,美欧是亲密的一家,很多西方国家孩子以去美国读书生...