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表动作也比较快。


相关内容

热门资讯

河南应用型本科高校服务新质生产... 杨刚要党的二十大报告中提出,教育、科技、人才是全面建设社会主义现代化国家的基础性、战略性支撑。高校是...
凤凰记者探访俄军野战食堂:运输... 凤凰卫视记者卢宇光走进康斯坦丁诺夫卡前线,探访俄军食品制作与配送中心。这个工作的制坊属于俄军的独立营...
组织群众撤离时不幸牺牲,“00... 据重庆日报消息,龚宝冬同志在彭水县山体崩塌灾害中,组织群众避险撤离时不幸牺牲,被评定为烈士。重庆市人...
“沙特王储督促特朗普不要打击伊... 美媒Axios当地时间8月1日报道,据两名美国官员及一名知悉通话内容的消息人士透露,沙特王储穆罕默德...
凤凰女记者德黑兰日志丨中国企业... 【编者按】这是凤凰卫视驻伊朗记者李睿的日记。她身处德黑兰,既是战争的亲历者,也是观察者。在她的日记里...
家长投诉女教师小学内拍舞蹈视频... 文 | 张彦宗湖南永州市东安县某小学有个教音乐的女老师,在某视频平台上开了个私人号,拍摄她在学校内的...
美计划本周末发动“猛烈轰炸”伊... 美国国务院8月1日向中东地区美国公民发出广泛安全警告,建议其考虑撤离或做好迅速撤离准备。据美方消息,...
难民危机,成为特朗普的选举道具 7月29日以来,约5万名移民从摩洛哥涌入西班牙北非飞地休达。短短三天,这座人口仅8万的小城被彻底淹没...
制胜|第二集《换羽之“陆”》大... 这一集猛料加倍!思想解读类融媒体片《制胜》正在播出中今天让我们把目光聚焦陆军锋芒!高清大图速存!以上...
王虹求学谣言被澄清,网上为什么... 文|章清7月29日,北京大学数学科学学院就菲尔兹奖得主王虹的网传不实传言作出澄清:王虹是北大数院20...