利用硬链接和truncate降低drop table对线上环境的影响

AWS SQS跨账户访问失败排查指南 在使用AWS SQS(Simple Queue Service)时,跨账户访问是常见的业务场景。例如,账户A的应用程序向队列发送消息,账户B的消费者从队列拉取消息。尽管AWS官方文档明确支持此类配置,但在实际应用中,由于权限模型的复杂性,开发者和运维人员常会遇到“策略已配置但无法接收消息”的问题。通过本文的逐步排查指南,您不仅可以解决当前问题,还能深入理解AWS跨账户访问的权限模型。接收方账户的用户或角色必须同时附加IAM策略,显式授权操作目标队列。尽管策略看似允许接收方操作,实际测试中却返回空消息或。 阅读详情

这篇文章可以做为《mysql删除大表更快的drop table办法》这篇文章的续篇和原理篇


众所周知drop table会严重的消耗服务器IO性能,如果被drop的table容量较大,甚至会影响到线上的正常。

首先,我们看一下为什么drop容量大的table会影响线上服务


  直接执行drop table,mysql会将表定义和表数据全都删除,包括磁盘上的物理文件,也包括buffer pool中的内存数据。

  这就分两步,第一步从buffer pool中删除,这会涉及到table_cache的lock,如果持有table_cache的lock,这将导致其他查询都无法执行。这种情况在没有innodb_per_table之前尤为严重。另外,mysql5.5.23之后添加lazy drop table功能,这个功能用来解决mutex on the LRU list。其中心思想就是加锁,找到需要被删除的page,删除1024个page之后释放锁让其他thread工作,之后loop。而percona的lazy drop处理起来更优雅一些,其会先加锁,然后找到需要被删除的page,标记,释放锁,后台慢慢删除。

  之后就是第二步,这步在大容量表的时候更为消耗时间,那就是在os上删除物理文件。大家都知道在ext3上rm一个200G的文件会非常耗时,这是由于ext3存储数据的结构导致,如果一个很大的文件,ext3的i_block无法直接存放,需要多层嵌套才能完全存储下,在这种情况下由于映射的层次多,并且由于多层映射也不会是顺序存储的,就导致了很大的随机IO,这就导致了删除物理文件非常慢的现象。在这种情况下,建议升级到ext4,这是由于ext4比ext3使用extent分配存储空间,其最大的优势就是顺序存储。

ext3:

ext4:

 

知道了原因,我们来说说如何解决。具体步骤如下:


 1、建立硬链接。

ln table.ibd table.idb.hdlk

  2、mysql执行drop table操作。

drop table if exists tablename;

  3、使用truncate删除物理文件。

truncate -s 1024*1024*4 filename

 

  其实硬链接和drop table就不用多说了,在建立硬链接之后,mysql会认为rm了硬链接文件之后就算操作完毕,不会真正去删除物理文件从而提高了速度。但是对于服务器来说,实际的物理文件还在,如果手动rm,还是会产生很多的io影响,这时候就用到了truncate这个工具。这个工具会根据指定的size大小进行逐步删除,会将对IO造成的影响降到最低。

复制代码
Usage: truncate OPTION... FILE...
Shrink or extend the size of each FILE to the specified size

A FILE argument that does not exist is created.

If a FILE is larger than the specified size, the extra data is lost.
If a FILE is shorter, it is extended and the extended part (hole)
reads as zero bytes.

Mandatory arguments to long options are mandatory for short options too.
  -c, --no-create        do not create any files
  -o, --io-blocks        treat SIZE as number of IO blocks instead of bytes
  -r, --reference=RFILE  base size on RFILE
  -s, --size=SIZE        set or adjust the file size by SIZE
      --help     display this help and exit
      --version  output version information and exit

SIZE may be (or may be an integer optionally followed by) one of following:
KB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.

SIZE may also be prefixed by one of the following modifying characters:
`+' extend by, `-' reduce by, `<' at most, `>' at least,
`/' round down to multiple of, `%' round up to multiple of.

Report truncate bugs to bug-coreutils@gnu.org
GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
General help using GNU software: <http://www.gnu.org/gethelp/>
For complete documentation, run: info coreutils 'truncate invocation'
复制代码

 

 


相关推荐

【Agent】多智能体框架MetaGPT入门教程

创建一个 Action 类的子类 SimpleWriteCode,子类中定义好 prompt,并解析返回结果。在 MetaGPT 中,

酒酿小圆子呀~ 3135

MySQL的delete和drop以及不常见的truncate的异同分析

MySQL的delete和drop以及不常见的truncate的异同分析 首先说一下delete和drop,这两个命令是常用的删除命令,在MySQL中,删除数据库还是删除表,或者删除表内字段,删除用户,都是有广泛的使用,但drop命令使用更为广泛,并且删除更为彻底。 删除数据库: 这个没什么好说的,只有drop命令, drop database 数据库名称,通常加 if exists,也就是 drop database if exists 数据库名; 删除表:drop table...

zsk_john的技术分享专用博客 1094

保姆级教程:用rosbag录制和回放你的第一个ROS机器人数据(附C++/Python代码)

本文提供了一份详细的ROS机器人数据录制与回放教程,涵盖从命令行操作到C++/Python编程实现的全流程。通过rosbag工具,开发者可以高效记录和回放机器人运行时的传感器数据和控制指令,适用于故障复现、算法调试等多种场景。教程还包含高级技巧如时间同步和大文件处理,帮助用户快速掌握ROS数据管理核心技能。

weixin_29313239的博客 283

mysql truncate table if exists_MySQL truncate table语句

在本教程中,您将学习如何使用MySQL TRUNCATE TABLE语句删除表中的所有数据。MySQL TRUNCATE TABLE语句简介MySQL TRUNCATE TABLE语句允许您删除表中的所有数据。 因此,在功能方面,TRUNCATE TABLE语句就像没有的语句。 但是,在某些情况下,MySQL TRUNCATE TABLE语句比DELETE语句更有效。MySQL TRUNCATE ...

weixin_35697651的博客 3787

Rockchip平台Android相机HAL3开发实战:从配置到调试全流程解析

本文深入解析了Rockchip平台Android相机HAL3的开发全流程。从理解AAL与PSL核心架构、解析关键配置文件(如camera3_profiles.xml和Tuning文件),到搭建编译环境、进行增量部署,并提供了系统日志分析、V4L2调试等高级问题排查技巧,为开发者提供了一套从配置到调试的实战指南。

docker7nomad的博客 843

芒果YOLOv5改进107:ARConv自适应旋转卷积,全网首发 | 即插即用:以增强其表征能力,从而准确检测方向物体,ICCV顶会论文idea

ARConv自适应旋转卷积,全网首发 | 即插即用:以增强其表征能力,从而准确检测方向物体,ICCV顶会论文idea

包括YOLOv5、YOLOv7、YOLOv8等模型改进 956

缓冲池(buffer pool)详解

InnoDB存储引擎是以页为单位来管理空间的,我们进行的增删改查操作其实本质都是在访问页面(读页面,写页面,创建新页面)等,磁盘IO需要消耗的时间很多,而在内存中进行操作,效率会高,为了能让数据表或者索引中的数据随时被使用,DBMS会申请占用内存来作为数据缓冲池,在真正访问页面之前,需要把磁盘上的页缓存到内存中的buffer pool中之后才可以访问。这样做的好处可以让磁盘活动量最小,从而减少与磁盘直接进行IO,这种策略可以提升SQL语句的查询性能。如果索引的数据在缓冲池中,那么访问的成本就会降低很多。

勇心在馨 3826

出现 has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present on the 解决方法

Access to XMLHttpRequest at 'http://127.0.0.1:5000/api/data' from origin 'http://10.197.0.79:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

码农研究僧的博客 1万+

PostgreSQL TRUNCATE TABLE

在PostgreSQL数据库管理系统中,语句是一种用于删除表中所有数据的快捷方式。与DELETE语句不同,不仅删除数据,还会释放与数据相关的存储空间。此外,操作是不可回滚的,这意味着一旦执行,就无法撤销。

csbysj2020的博客 799

05GATK流程和找变异

05GATK流程和找变异 GATK 集合了一套功能全面的高通量测序数据基因组分析工具包,算是业界的权威,更新的速度非常快。需要注意的是,不同版本的 GATK 在工具应用上会有些许不同。这里我们使用是最新版本 GATK 4.1.4.1(截止2019年12月31日)。 数据准备 前面我们提到了,走GATK流程需要到官网下载很多数据库文件,比如下面这些: dbsnp_146.hg38.vcf.gz dbsnp_146.hg38.vcf.gz.tbi Mills_and_1000G_gold_standard.

qq_23435961的博客 1660

4-20mA电流信号转电压

该电路实现4-20mA电流信号转电压(0.44-2.2V)调理功能,采用两级运放设计:第一级LMH6642MFX进行11倍放大,第二级配置为缓冲器加二阶低通滤波。电路包含10Ω采样电阻、多级RC滤波和ESD防护,具有抗干扰强、功耗低(4mW)等特点,适配3.3V系统ADC采集。通过使能控制MOS管可实现节能模式,适用于工业自动化、环境监测等场景。设计合理平衡了信号精度与功耗,输出电压范围留有充足余量避免饱和。

qq_37999850的博客 300

Mysql基础(六):Buffer Pool详细讲解

1、

mingyuli的博客 5062

第7章: MMU notifier在AMD GPU驱动中的应用

AMD GPU驱动利用MMU Interval Notifier机制实现共享虚拟内存(SVM)和异构内存管理(HMM)。通过分析AMDGPU内存架构(VRAM、GTT、Userptr)和Buffer Object设计,重点探讨了Userptr零拷贝机制如何依赖MMU notifier保持CPU/GPU内存一致性。HMM框架进一步实现统一地址空间和透明页面迁移,AMDGPU通过amdgpu_hmm.c实现两种invalidate回调(GFX和HSA模式),处理不同场景下的内存失效同步问题。

图形/计算GPU的驱动与虚拟化技术分享园地 2462

降低 mysql 链接_利用硬链接和truncate降低drop table对线上环境的影响_MySQL

众所周知drop table会严重的消耗服务器IO性能,如果被drop的table容量较大,甚至会影响到线上的正常。首先,我们看一下为什么drop容量大的table会影响线上服务直接执行drop table,mysql会将表定义和表数据全都删除,包括磁盘上的物理文件,也包括buffer pool中的内存数据。这就分两步,第一步从buffer pool中删除,这会涉及到table_cache的loc...

weixin_42290401的博客 231

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

mysql删除大表更快的drop table办法

利用硬链接和truncate降低drop table对线上环境的影响 在DROP TABLE的时候,所有进程不管是DDL还是DML都被HANG起;直到DROP结束才继续执行; 这是因为INNODB会维护一个全局独占锁(在table cache上面),直到DROP TABLE完成才释放。 在我们常用的ext3,ext4,ntfs文件系统,要删除一个大文件(几十G,甚至几百G)还

anzhen0429的博客 2万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

drop table mysql_mysql删除大表更快的drop table办法

mysql删除大表更快的drop table办法参考资料:https://blog.youkuaiyun.com/anzhen0429/article/details/76284320利用硬链接和truncate降低drop table对线上环境的影响在DROP TABLE的时候,所有进程不管是DDL还是DML都被HANG起;直到DROP结束才继续执行;这是因为INNODB会维护一个全局独占锁(在table ...

weixin_28956753的博客 199

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

mysql drop 几十g的表_mysql删除大表更快的drop table办法

mysql删除大表更快的drop table办法参考资料:https://blog.youkuaiyun.com/anzhen0429/article/details/76284320利用硬链接和truncate降低drop table对线上环境的影响在DROP TABLE的时候,所有进程不管是DDL还是DML都被HANG起;直到DROP结束才继续执行;这是因为INNODB会维护一个全局独占锁(在table ...

weixin_32095133的博客 416

drop mysql_【MySQL】drop大表

利用硬链接和truncate降低drop table对线上环境的影响 众所周知drop table会严重的消耗服务器IO性能,如果被drop的table容量较大,甚至会影响到线上的正常。首先,我们看一下为什么drop容量大的table会影响线上服务直接执行drop table,mysql会将表定义和表数据全都删除,包括磁盘上的物理文件,也包括buffer pool中的内存数据。 这就分两步,第一步...

weixin_42362885的博客 776

mysql大表删除数据库_分享一份mysql数据库大表的标准删除方案:drop + 硬链接

概述生产环境一张日志表占用达到166G,该表一直有数据写入,如果是直接delete/truncate时间过久,故下面采取drop+硬链方式进行删除。一、删除表原理与优化drop表时所有的mysql的相关进程都会停止,直到drop结束,mysql才会恢复执行。出现这个情况的原因就是因为,在drop table的时候,innodb维护了一个全局锁,drop完毕锁就释放了。这意味着,如果在白天,访问量非...

weixin_42522167的博客 433

mysql删除大表更快的drop table

利用硬链接和truncate降低drop table对线上环境的影响 在DROP TABLE的时候,所有进程不管是DDL还是DML都被HANG起;直到DROP结束才继续执行;这是因为INNODB会维护一个全局独占锁(在table cache上面),直到DROP TABLE完成才释放。在我们常用的ext3,ext4,ntfs文件系统...

hehyyoulan的博客 951

MySQL8 大表清空和删除正确方法

1 清空大表 1.1 清空方式之truncate 删除表中的数据的方法有delete,truncate, 其中TRUNCATE TABLE用于删除表中的所有行,而不记录单个行删除操作。TRUNCATE TABLE 与没有 WHERE 子句的 DELETE 语句类似;但是,TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源更少。 truncate 清空表数据,2.7G的表大概需要10秒以上; truncate table ucas_file_info; 1.2 清空方式之rena

zhouzhiwengang的专栏 2497

MySQL删除数据后表文件不缩小?InnoDB空间回收与碎片整理实战

在数据库日常运维中,清理过期数据是常见操作,但不少开发者发现执行DELETE后表文件大小不变,这通常与InnoDB存储引擎的设计有关。InnoDB采用标记删除与MVCC机制,被删记录并不会立即物理移除,而是等待purge线程回收,由此产生的表碎片会占据大量空间。理解这一原理,对于数据库容量规划与性能调优至关重要。在磁盘告警、历史数据清理、大表维护等场景中,掌握表空间回收方法能有效避免空间浪费。本文从InnoDB数据页结构出发,剖析删除链路与碎片成因,并给出OPTIMIZE TABLE、在线DDL等实用解决方

weixin_33800463的博客 333
上一篇: 如何使用mysql存储树形关系
下一篇: MySQL数据库的更新语句DELETE与TRUNCATE TABLE
笑天居士
博客等级 码龄24年 292粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值