当前位置:网站首页>MySQL如何 drop 大表
MySQL如何 drop 大表
2022-08-03 18:19:00 【墨天轮】
原理
MySQL如何快速的 drop 掉一个 100G 的大表?
别看 drop 命令很简单,但是当执行时机不对,执行姿势不对,可能会引发“大祸”。
那么,drop 一张表的时候,MySQL 的底层都干了些什么?
它为什么会慢,如何快速的进行一张表的 drop?
从高性能 MySQL 一书中,我们得出,MySQL 的 drop 命令,主要干了两件事:
- 清除 Buffer Pool 缓冲
- 删除对应的磁盘数据文件 ibd
针对第一点,当我们的 Buffer Pool 缓冲设置的越大,drop 时就越耗时,因此合理的 Buffer Pool 缓冲区设置就显得很重要。
第二点,尤其重要,因为它是真正存数据的文件。drop 数据慢,最大的原因,就是和它有关。
在DROP TABLE的时候,所有进程不管是DDL还是DML都被HANG起,直到DROP结束才继续执行。
这是因为INNODB会维护一个全局独占锁(在table cache上面),直到DROP TABLE完成才释放。
在我们常用的ext3,ext4,ntfs文件系统,要删除一个大文件(几十G,甚至几百G)还是需要点时间的。
在我们删除物理数据文件时,如果数据文件过大,删除过程会产生大量的 IO 并耗费更多的时间,造成磁盘 IO 开销飙升,CPU 负载过高,影响其他程序运行。
好在 Linux 提供的有硬连接特性,我们可以合理的利用这个特性,加快删除速度。
当多个文件名同时指向同一个 INODE 时,这个 INODE 的引用数 N > 1,删除其中任何一个文件名都会很快。因为其直接的物理文件块没有被删除,只是删除了一个指针而已;当 INODE 的引用数 N = 1 时,删除文件需要去把这个文件相关的所有数据块清除,所以会比较耗时。
操作
因此,我们可以合理的利用这个机制,给数据库表的 .ibd 文件创建一个新的硬链接。
如果是主从架构,请在所有机器上创建硬链接。
当删除表时,删除物理文件时,其实删除的就是物理文件的一个指针,所以删除操作响应速度会非常快,不到 1 秒就能完成这个操作。
ln data_log.ibd data_log.ibd.hdlk
drop table data_log;
最后就是要真正删除掉物理文件,释放文件所占用的磁盘空间。这一步我就不展开说了,网上有很多工具,都可以做到。
删除表时删除时:
1、清除Buffer Pool缓冲
在drop table时,innodb引擎会清理该表在每个buffer pool实例中中对应的数据块页面,为了避免对系统的影响,这里的清除操作并不是真正的flush,
而是将涉及到的页面从flush队列中摘除。但在摘除过程中,删除进程会持有每个buffer pool的全局锁,然后搜索这个buffer pool里对应的页面以便从flush list中删除。
如果在buffer pool中需要被搜索并删除的页面过多,那么遍历时间就会增大,这就导致了其他事务操作被阻塞,严重时可导致数据库夯住。
注意:从flush list中摘除对应的页面并不是真正的删除,它会暂时存在buffer pool的空闲池中,以便重新利用。
2、删除对应的磁盘数据文件ibd
在删除数据文件时,如果数据文件过大,删除过程会产生大量的IO并耗费更多的时间,造成磁盘IO开销飙升,CPU负载过高,影响其他程序运行。
边栏推荐
猜你喜欢
随机推荐
mysql之的执行计划
二叉树求和路径问题解答与注记
OSError: [WinError 123] 文件名、目录名或卷标语法不正确
中国算力大会昇腾鲲鹏生态论坛举办;快手成立独立to B业务部门…
PHP Basic Notes-NO.2
fatal error: jni.h: No such file or directory
Atomic Wallet已支持TRC20-USDT
Install porterLB
pydev debugger: warning: trying to add breakpoint to file that does not exist: /tmp/xxx
excel写入不完全sheet.append方法(openpyxl)
ImportError: /lib/libgdal.so.26: undefined symbol: sqlite3_column_table_name
借助Web3盘活日本优质IP:UneMeta 与 OpenSea 的差异化竞争
flink-sql 客户端,咋回事 我show tables 报错
Crack:WebKitX ActiveX and WebKitX VHX
CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes), problem: (D) Magical Array
高等数学---第十章无穷级数---常数项级数
USD 能统一元宇宙吗?
Blender script 删除所有幽灵对象
NLP范式新变化:Prompt
15、学习MySQL NULL 值处理