0
点赞
收藏
分享

微信扫一扫

mysql数据页空洞

Star英 2021-09-29 阅读 53

什么是数据页空洞?

innodb存储引擎是以b+树的形式组织数据的,b+树的叶子节点上存储的是数据页,数据页上存储的是数据记录,每个数据页的大小固定为16KB。如下图,当删除ID = 500这条记录时,实际上,引擎只会将这条记录标记为删除,由于数据页的大小是固定的,所以磁盘空间并不会缩小,但是标记为删除的记录空间是可以被复用的,这些可以被复用,但是没有被使用的空间,就形成了 "空洞"。

标记为删除,空间可复用,需要满足条件:300 < ID < 600delete(500)

哪些操作可以形成数据页空洞?

1)数据删除

见上图

2)数据插入

如果数据按照索引递增顺序插入,索引是紧凑的,如果是随机插入,则会造成索引的数据页分裂,而引起空洞


3)更新索引上的值

更新索引上的值,原理是删除旧的值,再插入新的值,因此也会造成空洞

怎样减少数据页空洞?

严格来讲,数据页空洞无法完全避免,但是我们可以尽量提高数据页的利用率:

采用递增ID,尽量保证索引紧凑。

对于需要频繁更新的字段,不适宜索引,不仅会造成数据页空洞,也会增加数据库负载,因为索引树要不断被重构。

对于删除数据的业务,定期检查磁盘碎片率,人工介入整理磁盘碎片。

如果空洞已经存在,如何消除?

重建表:alter table ...

重建表流程:

举报

相关推荐

0 条评论