MySQL

MySQL删除大表drop table

2018-04-27  本文已影响193人  Better朔

背景:在删除过大的表时,除了会导致DML和DDL阻塞之外,还会产生大量的IO,造成资源占用严重,影响正常的业务

前提:linux操作系统,MySQL数据库为独立表空间

思路:在独立表空间环境中,删除一个表体现在OS上则为删除一个表空间文件。所以在OS上使用硬链接,在删除表时,实际是删除硬链接,该操作能迅速完成,然后再在系统上进行文件的逐步删除

一、建立硬链接

    在OS上建立硬链接,例如表testbigfile,则在datadir下对应位置:

    ln testbigfile.ibd testbigfile.ibd.rm

    通过ll 显示的第二列可以看到有两个文件使用了这个链接,所以删除其中一个时,删除的只是链接(会使得MySQL删表时速度更快),只有在只有一个文件使用链接时,才是真正的删除

linux命令行ll -a 显示的内容

二、在MySQL中进行表的删除

    drop table bigtbdrop;

三、在操作系统删除硬链接文件

    由于突然删除上百GB的文件,同样会导致IO的占用,所以可以使用truncate工具进行递进删除,一次删除1GB;更好的做法是统计当前的IO使用资源,在空闲IO资源较多时,触发truncate的操作:

            truncate -s -1GB regtime.ibd

至此,则可删除大表,妈妈再也不用担心我的drop table啦

上一篇 下一篇

猜你喜欢

热点阅读