ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql如何收缩表空间

2020-07-06 13:07:04  阅读:266  来源: 互联网

标签:R4 删除 标记 收缩 复用 innodb mysql 空间 数据


 

参数 innodb_file_per_table   

mysql5.6.6版本以后,默认设置为ON,表示innodb表数据存储在一个以.ibd为后缀的文件中  

不建议设置为OFF,原因是  设置为OFF后,会将表数据存储在系统共享表空间中,即使drop掉表,空间也不会被回收【磁盘空间不会减少,只会无脑增加】

 

数据删除、修改:

innodb数据都是用B+树结构

 

当R4的数据删除以后,mysql会在R4这个位置记录一个标记为删除,当插入300~600之间的数据值,R4这个位置会被复用

当page A 整个数据页被删除后,整个页就会被标记为可复用 

 

但是数据页的复用和记录的复用是不一样的:

记录的复用只限于: 只限于符合范围条件的数据

数据页的复用:当一个数据页写满后,需要使用新的数据页,就可以被复用;如果相邻的两个数据页利用率都很小,系统就会把这两个页上的数据合到其中一个页上,另外一个数据页就被标记为可复用。

 

delete 命令其实只是把记录的位置,或者数据页标记为了“可复用”,但磁盘文件的大小是不会变的。所以,单靠delete 命令是不能回收表空间的

update可以理解为:删除一个旧的值,再插入一个新值

总结:经过大量的增删改,数据页上都是可能会存在空洞。

 

收缩表空间的方法:

重建表   建议使用命令:alter table a engine=InnoDB

原因如下:

 

标签:R4,删除,标记,收缩,复用,innodb,mysql,空间,数据
来源: https://www.cnblogs.com/byfboke/p/13254244.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有