MySQL大表删除方案

1.问题

在生产环境中,执行大表删除操作时,很容易因为占用了大量io资源导致其他事务被阻塞,最终事务不断堆积导致MySQL挂掉。

2.drop命令

drop命令,MySQL主要干了两件事:

  1. 清除buffer pool缓冲(内存)
  2. 删除表的ibd数据文件(磁盘)

第一点,因为buffer pool中存在最近修改的数据(称为脏页)还未刷新到磁盘中,如果需要删除表,那么则需要把这些脏页丢弃(都删除表了,那数据自然也不需要了)。

第二点,最关键和耗时的步骤,删除表磁盘上的数据文件,这会导致占用大量的io资源。

3.解决

借助linux硬链接的机制,为表的数据文件创建一个硬链接,这样执行drop操作时,删除的就不是真实的数据文件,而是一个指针,能够极大的提高drop速度,降低影响其他事务执行的风险。

创建硬链接的命令:

ln sysuser.ibd sysuser.ibd.hdlk

drop表完成后,就只剩下一个硬链接文件了,可以找个业务低峰期使用truncate或rm命令将其删除

4.注意

即使借助硬链接删除表很快,但也要挑选在业务低峰期去执行。这是我亲身经历的一个教训,在下午5点多下班的时候去删除一个与业务无关的表,20多T,结果还是导致数据库阻塞了,后面的事务全都在等待,事务一直堆积导致数据库挂了。(这应该和硬件性能有关,要是io给力直接秒删,连硬链接都不需要)

最后还是晚上11点我师傅去删了,也是硬链接的方式,花了不到两分钟。

在这里插入图片描述
在这里插入图片描述

用硬链接删除的方式也是我学习其他大神的,以下是参考博客:

https://www.cnblogs.com/rjzheng/p/9497109.html

https://www.modb.pro/db/450054.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/16181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STL源码刨析:序列式容器之vector

目录 1.序列式容器和关联式容器 2.vector的定义和结构 3.vector的构造函数和析构函数的实现 4.vector的数据结构以及实现源码 5.vector的元素操作 前言 本系列将重点对STL中的容器进行讲解,而在容器的分类中,我们将容器分为序列式容器和关联式容器。本章…

go语言初识(四)

本博客涉及内容:数组 数组 数组定义 在 go 语言中,数组是一种固定大小的数据结构,用于存储相同类型的元素。数组的定义方式如下: var arrayName [size]Type可以通过len()函数测试数组的长度: func main() {var a …

二.对配置文件中数据库密码进行加密

代码: public class DruidEncryptUtils {private static String publicKey;private static String privateKey;static {try {String[] keyPair ConfigTools.genKeyPair(512);privateKey keyPair[0];System.out.println("privateKey:"privateKey);publi…

Docker Hub注册及上传自定义镜像

说明:本文介绍如何注册Docker Hub,及将自己自定义镜像上传到Docker Hub上; 注册Docker Hub 浏览器输入:http://hub.docker.com/,进入Docker Hub官网 注:如果无法访问,可在GitHub上下载一个Ste…

Git--本地仓库

文章目录 工作区和暂存区工作区(Working Directory)版本库(Repository) 初始化git仓库添加文件到版本库步骤 查看修改内容查看工作区和暂存区状态已add文件已修改/新增 的未add文件git跟踪修改原理 查看提交历史版本回退撤销修改撤…

如何解决Redis缓存雪崩问题?

解决Redis缓存雪崩问题,可以从多个方面入手来确保系统在高并发和缓存失效时能够保持稳定运行。以下是一些具体的解决策略: 合理设置缓存过期时间: 避免大量缓存设置相同的过期时间,这样会导致在某一时刻缓存同时失效,造成缓存雪崩。可以使用Redis的EXPIRE命令或TTL命令,结…

白话文docker-002

第三章:Docker镜像的使用与管理 引言 Docker镜像是Docker生态中的核心组件,它们是轻量级的、可执行的软件包,包含了运行一个应用所需的所有内容。在本章中,我们将深入探讨如何创建和修改Dockerfile来构建镜像,获取、…

python基础(1) -- 基本数据类型与变量

基本数据类型与变量 1.1注释 优点: 1.代码说明 2.不让解释器执行注释的那句话 1.1.1 单行数据 语法: # #开头后面都是注释,python解释器会忽略掉注释 单行注释快捷键:ctrl?1.1.2 多行注释 """ &qu…

信息学奥赛初赛天天练-12-数论-整除问题

更多资源请关注纽扣编程微信公众号 整除的性质 1 整除性 若 𝑎 和 𝑏 都为整数, 𝑎 整除 𝑏 是指 𝑏 是 𝑎 的倍数,𝑎 是 𝑏 的约数(或者叫 因…

Vue 2与Vue 3的区别

1. 生命周期函数 Vue 2中的生命周期钩子以.created(), .mounted(), .updated()等形式存在,而在Vue 3中,这些钩子函数被重构为更符合Composition API的设计理念,使用了新的命名约定,如onBeforeMount, onMounted, onUpdated等。此外…

基于Arduino IDE的ESP32开发环境搭建

文章目录 一. Arduino IDE安装二. Arduino IDE安装ESP开发包 一. Arduino IDE安装 Arduino官网下载IDE软件 解压下载好的安装包,以管理员身份运行Arduino IDE软件 IDE第一次启动会安装各种驱动,直接点击确定就行 二. Arduino IDE安装ESP开发包 将…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-22讲 RTC 时钟设置

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

头歌结构化分析方法-数据流图

第1关:数据流图-画出外部实体 第2关:数据流图-画出加工 第3关:数据流图-画出数据存储 第4关:数据流图-画出数据流 第5关:数据流图-机票预定系统

【Python】 使用SMOTE解决数据不平衡问题

原谅把你带走的雨天 在渐渐模糊的窗前 每个人最后都要说再见 原谅被你带走的永远 微笑着容易过一天 也许是我已经 老了一点 那些日子你会不会舍不得 思念就像关不紧的门 空气里有幸福的灰尘 否则为何闭上眼睛的时候 又全都想起了 谁都别说 让我一个人躲一躲 你的承诺 我竟然没怀…

VXLAN小结

1.VXLAN:(组件虚拟网络的架构核心)虚拟扩展本地局域网,通过隧道的形式,将物理上有隔离的资源,在逻辑上连通起来,使其二层互通。 a.物理网络:指的是构成 VXLAN 连接的基础 IP 网络 b.逻辑网络:指的是通过 VXLAN 构建的虚拟网络 C.N…

DragonKnight CTF2024部分wp

DragonKnight CTF2024部分wp 最终成果 又是被带飞的一天,偷偷拷打一下队里的pwn手,只出了一题 这里是我们队的wp web web就出了两个ez题,确实很easy,只是需要一点脑洞(感觉), ezsgin dirsearch扫一下就发现有ind…

(九)npm 使用

视频链接:尚硅谷2024最新版微信小程序 文章目录 使用 npm 包自定义构建 npmVant Weapp 组件库的使用Vant Weapp 组件样式覆盖使用 npm 包 目前小程序已经支持使用 npm 安装第三方包,因为 node_modules 目录中的包不会参与小程序项目的编译、上传和打包, 因此在小程序项目中要…

ROS参数服务器

一、介绍 参数服务器是用于存储和检索参数的分布式多机器人配置系统,它允许节点动态地获取参数值。 在ROS中,参数服务器是一种用于存储和检索参数的分布式多机器人配置系统。它允许节点动态地获取参数值,并提供了一种方便的方式来管理和共享配…

基于Python Selenium web测试工具 - 基本用法详解

这篇文章主要介绍了Selenium(Python web测试工具)基本用法,结合实例形式分析了Selenium的基本安装、简单使用方法及相关操作技巧,需要的朋友可以参考下 本文实例讲述了Selenium基本用法。分享给大家供大家参考,具体如下: Seleni…