drop mysql,MySQL删除大表更快的DROP TABLE办法

2023-11-17

本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/mysql_fast_drop_table_use_hard_lin.html

曾经发文介绍过,DROP table XXX ,特别是碰到大表时,

http://www.mysqlops.com/2011/02/18/mysql-drop-table-%e5%a4%84%e7%90%86%e8%bf%87%e7%a8%8b.html

在DROP TABLE 过程中,所有操作都会被HANG住。

这是因为INNODB会维护一个全局独占锁(在table cache上面),直到DROP TABLE完成才释放。

在我们常用的ext3,ext4,ntfs文件系统,要删除一个大文件(几十G,甚至几百G)还是需要点时间的。

下面我们介绍一个快速DROP table 的方法; 不管多大的表,INNODB 都可以很快返回,表删除完成;

实现:巧用LINK(硬链接)

实测:

root@127.0.0.1 : test 21:38:00> show table status like ‘tt’ \G

*************************** 1. row ***************************

Name: tt

Engine: InnoDB

Version: 10

Row_format: Compact

Rows: 151789128

Avg_row_length: 72

Data_length: 11011096576

Max_data_length: 0

Index_length: 5206179840

Data_free: 7340032

Auto_increment: NULL

Create_time: 2011-05-18 14:55:08

Update_time: NULL

Check_time: NULL

Collation: utf8_general_ci

Checksum: NULL

Create_options:

Comment:

1 row in set (0.22 sec)

root@127.0.0.1 : test 21:39:34> drop table tt ;

Query OK, 0 rows affected (25.01 sec)

删除一个11G的表用时25秒左右(硬件不同,时间不同);

下面我们来对另一个更大的表进行删除;

但之前,我们需要对这个表的数据文件做一个硬连接:

root@ # ln stock.ibd stock.id.hdlk

root@ # ls stock.* -l

-rw-rw—- 1 mysql mysql        9196 Apr 14 23:03 stock.frm

-rw-r–r– 2 mysql mysql 19096666112 Apr 15 09:55 stock.ibd

-rw-r–r– 2 mysql mysql 19096666112 Apr 15 09:55 stock.id.hdlk

你会发现stock.ibd的INODES属性变成了2;

下面我们继续来删表。

root@127.0.0.1 : test 21:44:37> show table status like ‘stock’ \G

*************************** 1. row ***************************

Name: stock

Engine: InnoDB

Version: 10

Row_format: Compact

Rows: 49916863

Avg_row_length: 356

Data_length: 17799577600

Max_data_length: 0

Index_length: 1025507328

Data_free: 4194304

Auto_increment: NULL

Create_time: 2011-05-18 14:55:08

Update_time: NULL

Check_time: NULL

Collation: utf8_general_ci

Checksum: NULL

Create_options:

Comment:

1 row in set (0.23 sec)

root@127.0.0.1 : test 21:39:34> drop table stock ;

Query OK, 0 rows affected (0.99 sec)

1秒不到就删除完成; 也就是DROP TABLE不用再HANG这么久了。

但table是删除了,数据文件还在,所以你还需要最后数据文件给删除。

root # ll

total 19096666112

-rw-r–r– 2 mysql mysql 19096666112 Apr 15 09:55 stock.id.hdlk

root # rm stock.id.hdlk

虽然DROP TABLE 多绕了几步。(如果你有一个比较可靠的自运行程序(自动为大表建立硬链接,并会自动删除过期的硬链接文件),就会显得不那么繁琐。)

这样做能大大减少MYSQL HANG住的时间; 相信还是值得的。

至于原理: 就是利用OS HARD LINK的原理,

当多个文件名同时指向同一个INODE时,这个INODE的引用数N>1, 删除其中任何一个文件名都会很快.

因为其直接的物理文件块没有被删除.只是删除了一个指针而已;

当INODE的引用数N=1时, 删除文件需要去把这个文件相关的所有数据块清除,所以会比较耗时;

好了. 大家试试吧.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

drop mysql,MySQL删除大表更快的DROP TABLE办法 的相关文章

  • 坚持天天写技术笔记

    恍恍惚惚
  • 用C语言编写一段堆排序算法

    include
  • 同步、异步和阻塞、非阻塞的区别与联系

    同步 异步和阻塞 非阻塞的概念 同步 在执行一个操作的时候需要等待当前操作执行完毕才能执行下一操作 相当于操作串行化 即执行当前函数的时候需要拿到当前函数的返回结果才可以继续执行 异步 在执行一个操作的时候不需要拿到返回结果 只需要拿到注册
  • 程序员必备的免费AI生产力(摸鱼)工具,最后一个,人手必备

    最近ChatGPT等AI技术风靡全球 对于普通大众来说 越来越多的人开始关注智能时代对我们生活的影响 它颠覆了写作 办公 绘画 音视频 图像处理 UI 设计等领域 并涌现出了一批具有颠覆性的应用 在程序员领域 许多 AI 工具已经涌现 如
  • Android fragment间的通讯

    1 使用FragmentPagerAdapter情况下 param viewpagerId viewpager id eg R id vp param position fragment 的位置 return private Fragmen
  • linux线程内存开销

    1 首先是线程自己栈 程序没设置过 就是默认的 ulimit s 中的值 现在一般都是10240 单位KB 2 跟版本有关 是否有 glibc 的 malloc per thread arenas 特性 有了这个特性 设置不好 一个新线程要
  • 2003 - Cant't connect to MySQL server on 'ip'(10060 "Unknown error")

    问题描述 今天在搭建服务器之后 安装好MySQL 启动成功 并且创建远程连接用户 用户名和密码都正确 使用Navicat远程连接抛出如下错误 2003 Cant t connect to MySQL server on 192 168 13
  • Go module的介绍及使用

    Go1 1 1版本发布 2018 08 24发布 已经过去几天 从官方的博客中看到 有两个比较突出的特色 一个就是今天讲的module 模块概念 目前该功能还在试验阶段 有些地方还需要不断的进行完善 在官方正式宣布之前 打算不断修正这种支持
  • 牛客网:美团2021校招笔试-编程题(通用编程试题,第10场)

    某比赛已经进入了淘汰赛阶段 已知共有n名选手参与了此阶段比赛 他们的得分分别是a 1 a 2 a n 小美作为比赛的裁判希望设定一个分数线m 使得所有分数大于m的选手晋级 其他人淘汰 但是为了保护粉丝脆弱的心脏 小美希望晋级和淘汰的人数均在
  • Vivido添加pynq-Z2开发板

    一 下载pynq z2开发板文件 下载地址 https www tulembedded com FPGA ProductsPYNQ Z2 html 二 将下载的文件解压到vivado安装的位置 如果boards目录下面没有boards fi
  • 软件测试自动化UI框架之生成测试报告

    设置报告 自动化测试最后的运行结果要以报告的形式呈现 报告的格式是web端网页 需要引入第三方库 不是唯一的 有很多 一般一个公司统一用一个 1 引入自动生成测试框架报告 2 创建测试报告生成文件夹 reports 3 写代码 框架的入口文
  • UE4开发七:UE4打包

    一 使用UFE打包 UFE Unreal Frontend 虚幻前端 简化加快游戏开发及测试任务的工具 它可以用来准备游戏构建 将游戏部署到设备上并进行启动 测试版本 4 18为例 注意 UE4官方文档原话是在UE4编辑器中启动UFE或者P
  • java并发编程笔记(四)--JMM内存模型

    1 计算机结构 输入设备 就是我们的鼠标 键盘 存储器 对应的就是我们的内存 缓存 运算器和控制器共同组成了cpu 而输出设备就比如显示屏 打印机 我们重点来聊一下缓存 2 缓存 其实 当我们说计算机运行效率低下 速度慢 往往不是cpu的锅
  • Qt: QStringList去除重复元素

    项目中有个需求 有一个Qt字符串列表 里面有一些元素是重复的 要求去除 只留下不重复的元素 方法如下 QStringList distin QStringList list A B C D B B E B E C for int i 0 i
  • Redis(三)

    一 SpringBoot与Redis集成 1 引入依赖
  • 数组去重--根据ID去除数组中重复的数据

    根据ID去除数组中重复的数据 let data id 1 name 你好 id 1 name 你好 let obj let peon data reduce item index gt obj index id obj index id t
  • 使用js完成定时弹出广告设置

  • [485]python识别验证码系列3(基于机器学习)

    基于python语言的tensorflow的 端到端 的字符型验证码识别 1 Abstract 验证码 CAPTCHA 的诞生本身是为了自动区分 自然人 和 机器人 的一套公开方法 但是近几年的人工智能技术的发展 传统的字符验证已经形同虚设
  • Java系列笔记(3) - Java 内存区域和GC机制

    目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC Garbage Collection 垃圾收集 垃圾回收 机制 是Java与C

随机推荐

  • Ubuntu云原生环境安装,docker+k8s+kubeedge(亲测好用)

    docker安装步骤 Linux 一 移除以前docker相关包 sudo apt get autoremove docker docker ce docker engine docker io containerd runc 二 设置存储
  • 概率与计算机论文,概率归纳逻辑分析论文

    摘要 从穆勒等人对或然性的探讨 经耶方斯对概率归纳逻辑的开创 到卡尔纳普代表的现代概率归纳逻辑体系 考察了概率归纳逻辑的发展历程 从中揭示其兴起的原因 并分析现代归纳逻辑发展的一些新趋势 关键词 概率归纳 逻辑 概率论 概率归纳逻辑旨在以数
  • 字符串应用-实现KMP匹配算法

    题目描述 给定一个主串S和子串P 使用KMP算法查找子串P在主串S中存在的位置 若子串P在主串S中存在 则输出与子串P中第一字符相等的字符在主串S中的序号 若不存在则输出 no 程序输入格式 主串S 子串P 程序输出格式 输出与子串P中第一
  • Linux三剑客之awk命令详解

    目录 一 awk常见用法 二 案例 2 1 awk中 F的使用 2 2 awk中几个特殊的内部变量 用法 三 实战案例 一 awk常见用法 通常情况下awk所使用的命令格式如下 其中 单引号家伙是那个大括号 用于设置对于数据进行的处理动作
  • HDFS DataNode高密度存储机型的探索尝试

    前言 随着公司业务的发展 我们需要存储越来越庞大的数据来支撑公司业务的发展 这里就涉及到了数据存储能力的问题 需要存储的数据越多 其实意味着我们需要更多的机器来扩增HDFS集群存储的总capacity 但是机器数量的变多另外一方面带来的则是
  • Android Studio获取系统级签名方式

    android sharedUserId android uid system 系统签名 通过sharedUserId 拥有同一个User id的多个APK可以配置成运行在同一个进程中 那么把程序的UID配成android uid syst
  • CAS与ABA问题

    在JDK 5之前Java语言是靠synchronized关键字保证同步的 这会导致有锁机制存在以下问题 1 在多线程竞争下 加锁 释放锁会导致比较多的上下文切换和调度延时 引起性能问题 2 一个线程持有锁会导致其它所有需要此锁的线程挂起 3
  • Python爬虫到入门只需要三个月

    如何入门Python 为了能够帮助大家更轻松的学好Python开发 Python爬数据 Python数据分析等相关理论知识 给大家共同分享自己一套Python学习生活资料 文章最后面的有附属的相关资料 无论你是大牛还是小白 是想转行还是想入
  • C语言-扫雷游戏程序设计

    文章目录 一 问题要求 1 问题描述 2 程序的功能 二 基本要求 1 要求分析 2 需求分析 四 设计概要 1 程序的设计概要 2 程序的主要流程 1 设置棋盘 2 布地雷 五 用户说明 六 测试结果 1 运行结果说明 2 测试结论 七
  • 区块链基本加密概念

    什么是区块链 目前狭义就任务就是一个超级账本 区块链可以用来做什么 可以用来无障碍的置换 既然是用来交易的 那么我们就要有一个地址存放我的资产 地址 举例比特资产地址 一个比特币地址由两部分组成 一部分是公钥哈希值经过Base58check
  • 面试:Spring&SpringMVC&Mybatis 面试必备面试题

    Spring SpringMVC Mybatis常见面试题 历史文章 多线程史上最全面试题 持续更新中 dubbo zookeeper55道高频面试题 附加答案 SpringCloud SpringBoot经典面试题 附加答案 Spring
  • linux进程snprintf函数功能,linux 之 snprintf函数用法

    int snprintf char restrict buf size t n const char restrict format 函数说明 最多从源串中拷贝n 1个字符到目标串中 然后再在后面加一个0 所以如果目标串的大小为n 的话 将
  • MapReduce实现TopN的效果

    1 背景 最近在学习Hadoop的MapReduce 此处记录一下如何实现 TopN 的效果 以及在MapReduce中如何实现 自定义分组 2 需求 我们有一份数据 数据中存在如下3个字段 订单编号 订单项和订单项价格 输出的数据 需求如
  • 最近邻检索(NN)和近似最近邻(ANN)检索

    文章目录 1 最近邻检索 Nearest Neighbor Search 1 1 概述 1 2 应用领域 2 最近邻检索的发展 2 1 精确检索 2 2 近似检索 参考文献 1 最近邻检索 Nearest Neighbor Search 1
  • 解决导入aliyun-sdk-vod-upload后仍报错的问题

    在手动下载阿里云的aliyun sdk vod upload jar包并执行mvn install install file DgroupId com aliyun DartifactId aliyun sdk vod upload Dve
  • STM32 Freertos 添加 外部sram heap_5.c

    1 添加外部SRAM 初始化 2 添加heap 5 c 3 初始化heap 5 c 外部堆栈 Define the start address and size of the two RAM regions not used by the
  • MYSQL基础命令及添加用户及权限操作

    用root管理打开mysql 1 连接数据库 mysql u root p或者 mysql h192 168 222 132 uroot p通过ip远程连接数据库 mysql h host u user p password P port
  • 啊哈C语言——安装啊哈C编译器

    安装啊哈C编译器 首先访问啊哈C语言编译器的官网www ahacpp com 下载啊哈 C语言编译器安装包 Windows 单击下载之后会跳转到腾讯微云 选中文件复选框 然后单击保存微云 这个时候会弹出登录框 选择自己喜欢的登录方式 然后再
  • 华为OD机试 - 全量和已占用字符集(Java)

    题目描述 给定两个字符集合 一个是全量字符集 一个是已占用字符集 已占用字符集中的字符不能再使用 要求输出剩余可用字符集 输入描述 输入一个字符串 一定包含 前为全量字符集 后的为已占用字符集 已占用字符集中的字符一定是全量字符集中的字符
  • drop mysql,MySQL删除大表更快的DROP TABLE办法

    本文内容遵从CC版权协议 可以随意转载 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址 http www penglixun com tech database mysql fast drop table use hard li