========================================================================

问题原因

通常情况下,会使用innodb_file_per_table=ON来将每张InnoDB表数据和索引数据保存到一个独立的文件中,而当MySQL运行在Linux版本时,使用DROP TABLE删除表时,会同时删除磁盘上的数据文件来回收磁盘空间。
当删除超大表时:
1、Linux删除超大文件会在一段时间内严重消耗磁盘IO,引发磁盘性能问题。
2、MySQL删除表期间,InnoDB存储引擎需要维护一个全局锁直到删除完成,长时间持有全局锁会引发严重的阻塞。

========================================================================

优化原理

在Linux中,每个存储文件都会有指向该文件的Inode Index,多个文件名可以通过相同Inode Index指向相同一个存储文件。
当按照文件名删除文件时:
1、如果该文件名引用的Inode Index上还被其他文件名引用,则只会删除该文件名和Inode Index之间的引用
2、如果该文件名引用的Inode Index上没有被其他文件名引用,则删除该文件名和Inode Index之间的引用并删除Inode Index指向的存储文件。

========================================================================

操作步骤

1、创建硬连接指向要删除表的ibd文件
ln /data/mysql/mytest/erp.ibd /data/mysql/mytest/erp.ibd.hdlk
2、使用DELETE删除表
DROP TABLE mytest.erp;
3、使用truncate命令小批量删除文件,最后用rm删除整个文件
##seq  -  表示:从2194开始循环,每次递减10,直到循环至10
TRUNCATE=/usr/local/bin/truncate
for i in `seq - `;
do
sleep
$TRUNCATE -s ${i}G /data/mysql/mytest/erp.ibd.hdlk
done
rm -rf /data/mysql/mytest/erp.ibd.hdlk;

========================================================================

PS1:在Window上删除表时,Window只需要删除该文件指针并将该存储区域表示为可重用即可,因此在Windows上删除超大表无需过多操作。
参考链接:
https://www.cnblogs.com/digdeep/p/9588709.html
========================================================================

MySQL删除超大表操作的更多相关文章

  1. MySQL 删除数据表

    MySQL 删除数据表 MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TA ...

  2. MySQL删除所有表的外键约束、禁用外键约束

    转: MySQL删除所有表的外键约束.禁用外键约束 2017年10月27日 00:11:34 李阿飞 阅读数:4512   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...

  3. 十、MySQL 删除数据表

    MySQL 删除数据表 MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TA ...

  4. php MySQL 删除数据表

    MySQL 删除数据表 MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TA ...

  5. (转载)MySQL删除所有表的外键约束、禁用外键约束

    其实如果想删除所有表可以直接如下操作: 在navicat中直接选中所有表,然后右键删除表即可,会有提示,一路确定,就会先删掉没有外键的表和字表,只要一路确定,删几批就把表都删完了,并不算太麻烦. 转: ...

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

    mysql删除大表更快的drop table办法 参考资料:https://blog.csdn.net/anzhen0429/article/details/76284320 利用硬链接和trunca ...

  7. mysql 删除单表内多个字段重复的数据

    mysql 删除单表内多个字段重复的数据 DELETE from lot_log_payflow WHERE (pay_no,sub_flow_type) in () s1) AND id ) s2) ...

  8. MySQL之多表操作

    前言:之前已经针对数据库的单表查询进行了详细的介绍:MySQL之增删改查,然而实际开发中业务逻辑较为复杂,需要对多张表进行操作,现在对多表操作进行介绍. 前提:为方便后面的操作,我们首先创建一个数据库 ...

  9. Mysql之库表操作(胖胖老师)

    SQL概念:结构化查询语言(SQL = Structured Query Language),也是一种编程语言(数据库查询和程序设计语言),可以用于数据的存取及查询,更新,管理关系型数据库系统ps: ...

随机推荐

  1. linux使用flock文件锁

    使用linux flock 文件锁实现任务锁定,解决冲突 格式: flock [-sxun][-w #] fd# flock [-sxon][-w #] file [-c] command flock ...

  2. 20170706wdVBA保存图片到本地API

    Private Type GUID Data1 As Long Data2 As Integer Data3 As Integer Data4(0 To 7) As Byte End Type Pri ...

  3. PHP函数总结 (五)

    <?php /** * 回调函数: * 指调用函数时并不是传递一个标准的变量作为参数,而是将另一个函数作为参数传递到调用的函数中 * 使用回调函数可以 将一段自己定义的功能传到函数内部使用 * ...

  4. Cookie/Session机制详解(非原创)

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  5. html form表单提交后处理返回数据

    上传如果通过form提交并且需要处理返回值.(其实用ajax上传方式刚好,看需要) 可以这么做: <form id="importBookForm" action=" ...

  6. Oracle 备份与恢复 15 个典型问题

    1.问:Oracle11g数据库数据量有50T,每天增量50g左右,该如何制定备份方案,如何验证备份的有效性? 答:50T的数据也不大,运营商的地市级市数据基本都在100T以上了,只要备份环境允许的话 ...

  7. python元组()小括号

    names = ('jack','rose','tom','jerry','james','jerry') print(names) print(names[0]) #使用元组中的元素 print(n ...

  8. 离线部署 Cloudera Manager 5 和 CDH 5.12.1 及使用 CDH 部署 Hadoop 集群服务

    Cloudera Manager Cloudera Manager 分为两个部分:CDH和CM. CDH是Cloudera Distribution Hadoop的简称,顾名思义,就是cloudera ...

  9. java 缓冲区大小与下载速度的关系

    1.对于缓冲区空间的设定,要根据具体情况来定,如果存在大量的长信息(比如文件传输),将缓冲区定义的大些,可能更好的利用网络资源,如果更多的是短信息(比如聊天消息),使用小的缓冲区可能更好些,这样刷新的 ...

  10. Swift网络封装库Moya中文手册之Providers

    Providers 使用Moya,你可以通过一个 MoyaProvider 的实例发送所有网络请求,通过枚举来指定你要访问的具体API.在配置你的 Endpoint 之后,你差不多就做好了基础配置: ...