mysql删除的delete怎么找回(MySQL Delete 删数据后磁盘空间未释放的原因)
mysql删除的delete怎么找回
MySQL Delete 删数据后磁盘空间未释放的原因问题描述
在 MySQL 中使用 delete 语句删除数据之后,监控视图中可用的磁盘空间没有增加,磁盘使用率没有下降等等。
解决方案
delete 不释放空间是 MySQL 自身机制的原因,需要重建表才可以释放磁盘空间,可以参考的操作:
- 执行 optimize table ${table_name}。
- 如果是 InnoDB 的表,执行 alter table ${table_name} engine = innodb。
需要注意以下两个问题:
这两个命令都会重建表,尽量不要在磁盘空间紧张(>90%)的时候进行操作,先扩容磁盘,操作完之后再缩容。
这两个命令在开始和结束的时候都会尝试获取 metadata lock,所以尽量不要在业务高峰期执行。
问题分析
在 MySQL 的机制中,delete 删除的行只是被标记为删除状态,如果删除的行很多,整个数据页(innodb_page)的行都会被删除的时候,数据页也只会标记为删除,都不会真正的物理删除,而是一直占用,等待被复用。
例如:
可以看到 delete 前后,data_length 并没有发生变化,但是 data_free 增加了很多。这说明数据虽然删了,但是并没有被释放,仍旧被 test1 表占用,只是显示处于 free 状态,以后再写入新数据的时候就可以直接复用,而不需要在申请新的磁盘空间了。
这个时候使用alter table test1 engine = innodb
看看效果:
可以看到 data_length 和 data_free 都变成了空表的状态,仅有一个 innodb_page (默认 16k)。
PS:data_free 本身也可以用来评估表的空间碎片,当这个数字非常高的时候,可以考虑用同样的方法重建表,回收一部分磁盘空间。
以上就是MySQL Delete 删数据后磁盘空间未释放的原因的详细内容,更多关于MySQL 删数据后磁盘空间未释放的资料请关注开心学习网其它相关文章!
- centos7.5安装mysql教程(CentOS8下MySQL 8.0安装部署的方法)
- mysql事件教程(关于MySQL报警的一次分析处理详解)
- 执行mysqldump命令后数据库无反应(关于xampp启动不了mysql数据库的解决方法)
- mysql主从复制时突然来了一批数据(MySQL主从复制断开的常用修复方法)
- mysql中length、char_length区别
- mysql存储过程遍历数据(Mysql 存储过程中使用游标循环读取临时表)
- mysql哪些配置影响性能
- mysql连接查询原理(MySQL连接查询你真的学会了吗?)
- mysql索引的比较规则(MySQL的Flush-List和脏页的落盘机制)
- mysql8.0使用(MySQL 8.0新特性 — 检查性约束的使用简介)
- mysql怎么和sqlyog连接(Mysql桌面工具之SQLyog资源及激活使用方法告别黑白命令行)
- mysql中group_concat
- navicat连接报错10038(解决Navicat for Mysql连接报错1251的问题连接失败)
- mysql中提取日期的函数是什么(MySQL获得当前日期时间函数示例详解)
- navicat连接mysql是远程连接吗(详解Navicat远程连接mysql很慢)
- mysql发生系统错误(MySQL too many connections错误的原因及解决)
- 天热没胃口 这道菜开胃又下饭,2个小技巧新手一学就会(这道菜开胃又下饭)
- 指天椒紫苏爆炒牛肉(指天椒紫苏爆炒牛肉)
- 谷雨前,吃牛羊肉别忘了吃河鲜,除湿还清热,加紫苏一炒特解馋(吃牛羊肉别忘了吃河鲜)
- 紫苏牛肉锅里滚一滚,香的鼻子都要掉了(紫苏牛肉锅里滚一滚)
- 每天都吃水果的好处(每天吃水果的好处与功效)
- 苹果15价格(苹果15价格512g官网)
热门推荐
- dedecms标签调用原理(DEDECMS安全设置 执行php脚本限制设置方法apache+nginx)
- php缓存技术学习(简单实用的PHP文本缓存类实例)
- angular模块的组成(详解Angular结构型指令模块和样式)
- vue组件之间的通信(超详细的vue组件间通信总结)
- 阿里云负载均衡垂直扩容(阿里云负载均衡SLB安装SSL证书的方法)
- JSON中的特殊字符
- python正则表达式该怎么学习(Python面向对象总结及类与正则表达式详解)
- python转图片为字符图(Python实现图片转字符画的代码实例)
- win10安装mysql8.0如何启动(win10下mysql 8.0.23 安装配置方法图文教程)
- python判断对象是否是某一类型(Python判断对象是否相等及eq函数的讲解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9