当前位置:首页 > 短网址资讯 > 正文内容

MySQL大表删除解决方案

www.ft12.com8年前 (2017-07-16)短网址资讯1986

1. 表删除问题汇总

  1. mysql如何删除表

  2. 删除大表如何优化、解决

2. 删除表原理与优化

删除表原理上分为2部分:

  1. buffer pool页面清除过程。
    在删除表的时候,Innodb 会将文件在buffer pool中对应的页面清除。对于删除表的页面清除,只需要将页面从flash队列中删除即可,而不需要去做flush操作,减小对系统的冲击。
    (1) 问题1:如果buffer pool很大,或者是在buffer pool中有很多需要被flush的页面,那么此时遍历扫描页面时就会占用比较长的时间,导致其他事务在用到相应buffer pool实例时被阻塞,从而影响整个数据库性能。

    • 优化:涉及源码,优化困难

  2. 删除ibd磁盘文件的过程。
    (1)问题1:表文件过大,直接删除会瞬时占用大量IO,造成IO阻塞

    • 优化:使用硬链

    • 原理:一个磁盘上的文件,可以由多个文件系统的文件引用,这多个文件的完全相同的,都指向同一个磁盘上的文件,当我们删除任何一个文件的时候,都不会影响真实的文件,只是会将其引用数据减1,只有当被引用数目变为1的时候,再次删除文件,才会真正被删除。删除时,这两种情况的区别很明显,一个是在减少被引用数目,一个是真正做IO来删除它

    • 操作:

ln /data/mydata/my3306/testdb/table1.ibd     /data/mydata/my3306/testdb/table1.ibd.hdlk
ls -lh    /data/mydata/my3306/testdb 查看文件引用数(应该为2)

(2) 问题2:做完硬链,真正的大文件删除问题,直接rm 删除,会造成IO瞬时高峰

  • 优化:使用工具,多次少量的删除

  • 原理:利用系统文件的truncate,脚本工具为slowrm

3. slowrm

注:此工具作者为 “贾春生”,此处只分享~

3.1 需求

缓解大表删除带来的IO瞬间压力

3.2 slowrm功能

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

3.3 slowrm实现

3.3.1 背景描述

先简要介绍下slowrm工具开发的背景。
我们曾在《linux_mysql_DROP_TABLE操作步骤》中提到,对于大表的删除,应当先建立硬链,drop table后,再删除表数据文件。
对于大表的数据文件,可能会达到10G,也可以是100G级别,甚至更大。在linux下,这样的大文件在使用rm时,无疑会导致IO资源被强行占用,表现为硬盘的io_util基本上是100%左右,会对其它IO操作造成阻塞。更可怕的是,rm单个文件的过程是个原子过程,无法使用kill或kill -9来杀死rm进程,只能乖乖的等待它结束。

如果是在繁忙的线上服务所在的机器上做这样的删除操作,很可能会对线上服务产生影响。因此需要有一个平滑删除大文件的方案。而这样的方案最终是与数据库无关的,而是一个通用方案。

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提供了支持该思路的API,truncate/ftruncate函数,可以对文件截断至任意长度()。经过测试,发现每次截断一点,分多次截断,最终直至文件大小被截断为0,这样删除大文件需要更多的时间,但是对磁盘IO的影响却大大减小了。因此采用该思路是可行的。

3.4 slowrm使用

slowrm  [OPTIONS]  FILES
对删除文件的方式与rm类似。

3.4.1 选项及参数

该工具的使用主要涉及两个参数:
-b   #size
每次需要截断掉的文件大小,单位为字节,参数值需要是整数,默认值4096 * 256Bytes( = 1MB);
-s   #seconds
每两次截断操作之间的时间间隔,单位为秒,参数值可以为小数。这两个参数用以控制删除速度,及删除过程对磁盘IO的压力。默认值0.1 second
-h, —help
查看帮助信息。

直接输入slowrm,或输入slowrm –h或slowrm —help可以查看帮助。

3.4.2 删除速度

可以看到默认删除速度是: 4096 * 256Bytes / 0.1second= 10MB/s,被删除的文件每秒钟可以减少10MB。
用户可以通过上述两个参数来控制删除的速度以及对磁盘IO的压力。

3.5 slowrm 与 rm 对比


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

3.6 注意

3.6.1 删除文件类型

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

3.6.2 硬链的删除

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

3.7 测试使用

制造大文件


开始删除


大小情况


压力情况
rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util

3.8 日常使用

  1. 开启一个screen
    screen -S slowrm_test

  2. 开始删除文件
    slowrm file
    或者指定速度,正常默认即可(10MB/s)


扫描二维码推送至手机访问。

版权声明:本文由短链接发布,如需转载请注明出处。

本文链接:https://www.ft12.com/article_291.html

标签: MYSQL短网址
分享给朋友:

相关文章

捷豹F-Pace大战沃尔沃XC60,谁更胜一筹?

捷豹F-Pace大战沃尔沃XC60,谁更胜一筹?

文 | ft12.com 编辑 :短网址作为一个SUV大国,路上已经罕有什么SUV会引起笔者的注意了,但每次一辆保时捷Macan从旁驶过的时候都会引起我短暂的注目。可你知道的,Macan的基础来源于奥迪Q5,所以如果你不想和满大街的各类“M...

全球纯电动车制造商出货量排名:特斯拉仅第二

提到电动汽车,我们往往首先想到的是特斯拉,然而根据一份最新调查数据显示,特斯拉并非全球最大的电动汽车制造商。据JATO数据提供商最新公开的纯电动车制造商排名显示,目前雷诺-日产是全球最大的纯电动车制造商,特斯拉排在第二位,其它前十名厂商分别...

【FT12短网址】JavaScript 疲劳终极指南:我们行业的真相

【FT12短网址】JavaScript 疲劳终极指南:我们行业的真相

引言812是个很有含义的数字,本文是FT12短网址摘录自网络,版权和其他权益归原作者所有。正文从这开始~抱怨 JS 疲劳就像是在抱怨人类发明了太多解决问题的工具:从邮件到飞机到宇宙飞船。上周我在 NebraskaJS 2017 会议上做了一...

发力跨境业务 亚马逊在华力图“收复失地”

尽管没有发布清晰的扩张计划,但亚马逊我国已开端广纳人才,为新一轮商场包围战做准备。据彭博社日前报导,亚马逊在我国招聘数百名职工来填充网络软件工程师、Alexa设计师等岗位。但在近期发布的招聘岗位中,触及跨境事务的职位成为亚马逊的主要招聘方向...

搞懂“挣钱”和“花钱”背后的心理学,你才能实现财富自由!

搞懂“挣钱”和“花钱”背后的心理学,你才能实现财富自由!

没有人会说自己讨厌金钱,但是他们在心里却对金钱怀挟各种偏见。生活中,你是不是经常遇到这样的观点:·有钱人的钱都见不得人· 男人有钱就学坏· 有钱人的钱都是省出来的·年轻女孩开好车,被包养了吧· 他那么有钱,帮我...

腾讯推行信用分的背后,或许是小程序电商的铺垫

腾讯推行信用分的背后,或许是小程序电商的铺垫

前言  最近腾讯信誉分开端进行灰度测验,引起了相当多的重视。  事实上,腾讯信征早已对外开放,而且推出时刻和芝麻信誉一样,同样是2015年。  只不过彼时腾讯只推出了信征报告,能够查询的内容也比较有限,其给出当前信誉较好、较差,以及当前排名...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。