当前位置:网站首页>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负载过高,影响其他程序运行。
边栏推荐
- 如何成为优秀的产品运营?
- With the help of Kubernetes kubekey speed installation
- Win11系统的显卡驱动安装的详细方法步骤
- WPF 实现柱形统计图
- excel写入不完全sheet.append方法(openpyxl)
- Unable to start SinkRunner: { policy:org.apache.flume
- 多商户商城系统功能拆解21讲-平台端分销订单
- 常见荧光染料修饰多种基团及其激发和 发射波长数据一览数据
- 一文带你弄懂 CDN 技术的原理
- LeetCode - 102. 二叉树的层序遍历;110. 平衡二叉树;098. 验证二叉搜索树
猜你喜欢
Jenkins CI平台(二)
yaml数据格式
技术干货|如何将 Pulsar 数据快速且无缝接入 Apache Doris
谷歌浏览器安装插件教程步骤,开发用这2个插件工作效率倍增
【Azure 事件中心】使用Azure AD认证方式创建Event Hub Consume Client + 自定义Event Position
爬虫之selenium
细胞不可渗透的荧光探针 锌离子荧光探针Zinquin 151606-29-0
yaml data format
Online monitoring of UPS power supply and operating environment in the computer room, the solution is here
图像传感第一章学习心得
随机推荐
借助kubekey极速安装Kubernetes
图像传感第一章学习心得
Chrome浏览器开发新截图工具,安全浏览器截图方法
什么是鉴权?一篇文章带你了解postman的多种方式
Execution plan of mysql
Intelligent security contract - delegatecall (2)
@resource和@autowired的区别
CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes), problem: (D) Magical Array
flink-sql 客户端 可以设置并行度 吗?断开算子链
OSError: [WinError 123] 文件名、目录名或卷标语法不正确
cdc抽取mysql整个实例的binlog,有没有方案通过配置的方式将这些库表拆开分发到kafka
我们为何看好投资 DAO?
Mock模拟数据,并发起get,post请求(保姆级教程,一定能成功)
这是Facebook母公司 关于元宇宙的80万亿美元豪赌
5000元价位高性能轻薄本标杆 华硕无双高颜能打
Unable to start SinkRunner: { policy:org.apache.flume
87.(cesium之家)cesium热力图(贴地形)
Flask框架——项目可安装化
【Django-Docker】Sqlite3.db读取权限不够-20220803
架构基本概念和架构本质