MySQL大表删除解决方案

<1>将大文件按照指定速度进行删除,降低IO瞬间压力

3.3.1、背景描述

3.3.2、设计思路
对于删除大文件的操作,采用每次将文件截断一点,分多次截断,最终直至文件大小被截断为0
如下面的过程示例:
block_size = 1024576bytes;
while file_size >=block_size
begin
ftruncate (file, new_size);
(其中(old_size -new_size = block_size)
sleep 0.05 seconds;
end
ftruncate(file, 0);
因为既然rm一个文件是不可中断的,那么我们就将删除过程打散,分多次删除一个,每次删除一点。幸好现在的linux提供了支持该思路的APItruncate/ftruncate函数,可以对文件截断至任意长度()。经过测试,发现每次截断一点,分多次截断,最终直至文件大小被截断为0,这样删除大文件需要更多的时间,但是对磁盘IO的影响却大大减小了。因此采用该思路是可行的。
3.4、slowrm使用

3.4.1、选项及参数

该工具的使用主要涉及两个参数:
 -b   #size
每次需要截断掉的文件大小,单位为字节,参数值需要是整数,默认值4096 * 256Bytes( = 1MB);
 -s   #seconds
每两次截断操作之间的时间间隔,单位为秒,参数值可以为小数。这两个参数用以控制删除速度,及删除过程对磁盘IO的压力。默认值0.1 second
 -h, --help
查看帮助信息。
直接输入slowrm,或输入slowrm –hslowrm --help可以查看帮助。
     实际上,可以看出,由#size * #seconds = #ioBPS Bytes/s
即可计算得出每秒该操作消耗的IO吞吐量(字节数),也即大约每秒文件所减小的字节数。

使用方式    
slowrm    rm    备注
提示是否删除    
默认支持    rm -i    默认slowrm会询问用户是否删除每一个指定文件
删除单个文件
slowrm file    rm file    相同
删除多个文件 显示指定文件    slowrm file1 file2 file3rm file1 file2 file3
使用通配符    slowrm file*    rm file*
删除硬链 硬链数大于1删除硬链同rm    删除硬链实际执行的就是unlink
硬链数等于1    

低速删除文件    

全速删除文件    实质上在判断硬链数上逻辑是一样的,只是最后一个硬链的删除方式不同
强制删除文件
slowrm -f
slowrm --force    
rm -f
rm --force    
相同
控制删除速度控制速度slowrm -s 0.1 -b 262144 file (2MB/s)不支持
默认速度    slowrm file 
对应参数-s 0.1 -b 1048576(10MB/s)
一般使用默认参数即可
删除其他类型文件目录,软链    不支持

递归删除目录
rm -rf 目录

可见,一般情况下,还是使用rm删除即可。
在需要低IO负载删除大文件时,可以使用slowrm
slowrm对于rm是起到一个补充的作用。

3.6.1、删除文件类型

目前,该工具只支持删除具体常规文件,无法对目录进行递归删除,但可以支持对多个文件进行删除,如slowrm *.logmysql.err.2014*
也无法对软链接,文件等进行删除。

3.6.2、硬链的删除

如果slowrm要删除的文件的硬链接数目大于1,那么就会直接删除该硬链;
如果待删除的文件硬链数目等于1,那么会按照平滑删除的方式,逐步截断该文件。

制造大文件

大小情况
压力情况

 
3.8、日常使用
screen -S slowrm_test
2、开始删除文件
或者指定速度,正常默认即可(10MB/s)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值