怎么用自己主机做网站、,淮南网站推广,网站制作郑州,娃娃修复师的工作主要是什么一、表空间1、表空间#xff1a; innodb 引擎存储的最高层#xff1b; 存放所有的数据2、独立表空间#xff1a;Mysql 版本5.6 后默认开启的单表单空间(1)Innodb 默认存储引擎页的大小为 16K #xff1b;默认表空间 大小为96k(2)独立表空间 开启方式 innodb_file_per_table…一、表空间1、表空间 innodb 引擎存储的最高层 存放所有的数据2、独立表空间Mysql 版本5.6 后默认开启的单表单空间(1)Innodb 默认存储引擎页的大小为 16K 默认表空间 大小为96k(2)独立表空间 开启方式 innodb_file_per_table ON 从Mysql 5.6.6 开始默认值 ON二、数据页空洞如果我们修改了 info表 的表结构 比如 给表添加注释发现9440 Dec 14 09:59 info.frm磁盘上的 frm 表结构文件 立刻被更新了。那我们如果删除一行数据呢 从文件更改时间上来看也是立刻修改了。180224 Dec 14 10:03 temp.ibd但是 idb数据文件 大小 180224却没有改变那么数据库的删除流程到底是怎么样的 为什么我们删除一行存储的ibd文件大小却没有改变当我们点击 删除表的时候SQl 引擎发生了什么1、Innodb 的删除为什么 ibd 文件不会变小InnoDb 的数据存储类型是 B树 B树的叶子结点上 存储的是 数据页 一页数据页存储的是 数据记录假设一条数据记录占用 200字节 一页数据页大小为 16Kb 那么一页可以存储80条数据记录 当某条数据记录比如 ID 300 的数据记录被删除了实际上引擎只会标记这条数据记录为删除而不会将数据记录从磁盘上抹去所以磁盘文件上的 ibd 文件不会缩小一个数据页 Page A 上总是存储着 ID从 X 到 XN 的 数据记录 如果 X 到 XN 之间的数据记录被删除了会留下一个数据空洞那么插入的X 到 XN 区间之间且不在PageA上就会复用这个数据页 所以文件大小不会减少如果删除了1整个数据页的所有记录那么这整个数据页都会被复用所以删除和插入其实是在数据页上产生和填补空洞 的过程 经过删除更新插入的表都可能会产生大量的空洞。2、整理数据页的空洞那么当一张表被更新插入产生了数据空洞之后如何整理数据页使得数据变得更紧凑呢可以采取重建表的操作 alter table实际上这里是 引擎自动完成了 转存数据、交换表名、删除旧表的操作mysql alter table temp engineinnodb;163840 Dec 14 10:52 temp.ibd3、测试数据页的增长效果新建一张 new_test 表CREATE TABLE new_test (id int(11) unsigned NOT NULL AUTO_INCREMENT,name char(255) DEFAULT NULL,PRIMARYKEY(id)) ENGINEInnoDB AUTO_INCREMENT191 DEFAULT CHARSETutf8mb4;我们知道 初始 ibd文件 的大小默认是 96K inndb 默认单个数据页大小是16K对 new_test 表进行数据增加观察 ibd文件大小。insert into new_test (name) value(leon”)发现 当rows 增长时ibd文件大小增长规律如下idb文件大小 VS rows96k – 081128k – 82136144k – 136190160k – 19025516K 增长对应 54条rows 1条row算出来约等于 296.29b 正好等于 char 255b int(11) 44 299b 。可以看出来的确是由连续的数据页组成数据的。4、数据空洞的复用为了数据空洞的复用的问题我们来删除 new_test 表 1-180行中的 155-160 行 ibd文件 原始大小为 144KB当我们删除 150-160 这时候数据页就有了 10条ID 的空洞 此时表中ID是 0-149 161 -180 共计 170条 那么这时候插入20条 还是 10条 数据页呢 测试可得。插入20条ID到 201。表空间变为 160k所以原来的数据页存在空洞 可以被复用(待理解)---按照计算应该一条数据是800b有十条空洞再加入10条应该是144KB0.8*10152KB160k不是说明原来的空洞没有复用上吗原文https://blog.csdn.net/qq_28018283/article/details/85003657