https://juejin.cn/post/7381333086120345636
页分裂(Page Split) 一个已满或接近满的数据页需要插入新记录时。数据库不能改变现有的记录 来容纳新记录,因此会将该页的记录分割存到新的一页,并在新旧数据页之间创建指针页分裂的触发条件
-- 当插入行的行数据大小超过页当前可用空间,且导致当前页使用率超过原有大小的1.5倍
-- 非自增主键,在已插入页的行的ID中间插入新的逐渐ID,违反索引的顺序性,会页分裂进行重 新排序。比如已有ID 1 和 3,接着插入ID 2。页分裂机制的优点
-- 灵活性和扩展性: 页分裂让数据库适应变化的数据需求,保持数据结构的完整性和稳定性
-- B+树结构维护友好: 通过对索引页进行分裂,保持B+树的平衡度,有利于数据的快速查找
-- 减少数据页碎片: 页分裂可以重新组织数据,减少数据碎片化
-- 自动管理: 无需用户干预,透明处理空间不足的问题页分裂机制的缺点
-- IO操作增加: 页分裂过程中,数据的移动和共享涉及到额外的磁盘IO操作,会降低性能
-- 磁盘碎片增加: 频繁的页分裂会导致磁盘碎片的产生,会降低数据检索性能。并且可能导致 子页面和主页面不在同一物理存储位置,增加访问时的跳转,降低性能
-- 牵扯其他操作: 页分裂受页大小的限制,对于很大的数据不能完整存储到一个页中,需要 行溢出。还可能触发索引重建等操作如何避免页分裂
-- 合理创建、优化索引,避免创建过多索引、尽量避免乱序插入主键索引
-- 新数据采用批量插入,减少单次操作导致的分裂
-- 定期维护重建索引
-- 减少长事务
-- 有条件也可以硬件升级
-- 合理分区分表需要注意的是,不能也不应该完全避免页分裂机制,适当的页分裂对数据库来说是很重要的。应该 高效管理页分裂以避免性能问题
页分裂(Page Split) 一个已满或接近满的数据页需要插入新记录时。数据库不能改变现有的记录 来容纳新记录,因此会将该页的记录分割存到新的一页,并在新旧数据页之间创建指针
页分裂的触发条件
-- 当插入行的行数据大小超过页当前可用空间,且导致当前页使用率超过原有大小的1.5倍
-- 非自增主键,在已插入页的行的ID中间插入新的逐渐ID,违反索引的顺序性,会页分裂进行重 新排序。比如已有ID 1 和 3,接着插入ID 2。
页分裂机制的优点
-- 灵活性和扩展性: 页分裂让数据库适应变化的数据需求,保持数据结构的完整性和稳定性
-- B+树结构维护友好: 通过对索引页进行分裂,保持B+树的平衡度,有利于数据的快速查找
-- 减少数据页碎片: 页分裂可以重新组织数据,减少数据碎片化
-- 自动管理: 无需用户干预,透明处理空间不足的问题
页分裂机制的缺点
-- IO操作增加: 页分裂过程中,数据的移动和共享涉及到额外的磁盘IO操作,会降低性能
-- 磁盘碎片增加: 频繁的页分裂会导致磁盘碎片的产生,会降低数据检索性能。并且可能导致 子页面和主页面不在同一物理存储位置,增加访问时的跳转,降低性能
-- 牵扯其他操作: 页分裂受页大小的限制,对于很大的数据不能完整存储到一个页中,需要 行溢出。还可能触发索引重建等操作
如何避免页分裂
-- 合理创建、优化索引,避免创建过多索引、尽量避免乱序插入主键索引
-- 新数据采用批量插入,减少单次操作导致的分裂
-- 定期维护重建索引
-- 减少长事务
-- 有条件也可以硬件升级
-- 合理分区分表
需要注意的是,不能也不应该完全避免页分裂机制,适当的页分裂对数据库来说是很重要的。应该 高效管理页分裂以避免性能问题
作者:Raymond_Don链接:https://juejin.cn/post/7381333086120345636来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。