MySQL删除超大表操作
========================================================================
问题原因
通常情况下,会使用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指向的存储文件。
========================================================================
操作步骤
ln /data/mysql/mytest/erp.ibd /data/mysql/mytest/erp.ibd.hdlk
DROP TABLE mytest.erp;
##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;
========================================================================
https://www.cnblogs.com/digdeep/p/9588709.html
最新文章
- git免密码pull,push
- 并查集+关系的传递(poj 1182)
- placeholder的兼容性探索之路
- MVC控制器C完美分离(有脚手架辅助)
- Android自定义控件:进度条的四种实现方式(Progress Wheel的解析)
- nginx的负载均衡和反响代理配置
- jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中
- 关于看似简单的eclipse中tomcat小猫图标消失的问题解决
- LinkedList集合
- 初识RabbitMQ系列之一:简单介绍
- Koltin——最详细的可见性修饰符详解
- zeppelin0.7.3源码编译
- python 3.6 tkinter+urllib+json 火车车次信息查询
- SpringMVC源码情操陶冶-AbstractHandlerMethodMapping
- linux vi如何保存编辑的文件
- java中组合与聚合(聚集)的区别
- json转换工具类:json<;===>;list或者对象
- Hadoop HBase概念学习系列之优秀行键设计(十六)
- IntelliJ IDEA 2017版 快捷键CTRL + SHIFT + A无效如何调试(详细的开启idea自动make功能 )
- U3D的一些常用基础脚本
热门文章
- English trip -- VC(情景课)10 C I like to watch TV. 我爱看电视
- android--------自定义Dialog之信息提示
- 第二类斯特林数(转自http://www.cnblogs.com/gzy-cjoier/p/8426987.html )
- laravel 异常深度解析
- bzoj4589: Hard Nim fwt
- python-day21--os模块
- hdu-3276-dp+二分+单调队列
- pageContext对象
- sql 数据库显示 正在恢复
- spring boot 学习(三)API注解记录及测试