表的空间回收
InnoDB:表结构定义和数,
mysql 8.0之前放在以.frm为后缀的文件里,mysql8.0之后把结构放在系统数据表中(表结构空间小)
innodb_file_per_table
on 每个表存储在.ibd为后缀的文件中(drop table系统会直接删除这个文件,容易管理)推荐
删除行,表空间没有被回收?
数据页复用:随意使用(delete语句吧整个表的数据删除,数据页就会标记为可复用,造成空洞)
插入数据也会造成空洞:插入的数据要放到新的页里,而且是按顺序,这样会形成大量空洞
-》重建表 (1、临时表重新插入。2、alter table A engine=InnoDb命令重建表(自动转存数据、交换表名、删除旧表))
ONLINE DDL:重建表的过程允许对A做增删改查
alter table在启动时拿到写锁,拷贝数据之前退化成读锁(只是禁止其他线程DDL)
online
inplace
记录的复用:按照顺序使用
off 数据放在共享表(跟数据字典放在一起)
MySQL InnoDB表空间回收与重建
本文主要介绍了MySQL InnoDB表的空间回收相关内容。在MySQL 8.0前后,表结构定义的存储位置不同。innodb_file_per_table设置为on时,表存储在.ibd文件,便于管理。删除行和插入数据会造成表空间空洞,可通过重建表解决,如使用alter table A engine=InnoDb命令,且支持ONLINE DDL。
1262

被折叠的 条评论
为什么被折叠?



