第14期:数据页合并
MySQL InnoDB 表数据页或者二级索引页(简称数据页或者索引页)的合并与分裂对 InnoDB 表整体性能影响很大;数据页的这类操作越多,对 InnoDB 表数据写入的影响越大。 MySQL 提供了一个 数据页合并临界值 (MERGE_THRESHOLD),在某些场景下,可以人为介入,减少数据页的合并与分裂。 在 InnoDB 表里,每个数据页默认16K 大小,默认 MERGE_THRESHOLD 值为 50,取值范围从 1 到 50,默认值即是最大值。也就是当页面记录数占比小于 50% 时,MySQL 会把这页和相邻的页面进行合并,保证数据页的紧凑,避免太多浪费。 触发临界值场景 场景一: 页 A 里本来数据占用 100%,有一部分记录被删掉后,数据占用小于 50%,刚好触发了临界值。 场景二: 页 B 里存放的记录被更新为更短的形式,比如记录值由 rpad('我爱你们所有人' , 10000, '添加冗余字符')变为 '我只爱你' ,这时候记录对数据页占用也小于 50%,刚好触发了临界值。 简述数据页的合并 页 A 在删除一些记录后,此页里剩余记录对页 A 的占用小于 MERGE_THRESHOLD 设定的值,此时刚好页 A 相邻的一个页 C,数据占用也不到 50%,这时候 MySQL 会把页 C 的记录并入页 A,之后页 C 的空间就被释放,不包含任何数据,页 C