收缩数据库会导致严重的索引碎片

收缩数据文件会导致严重的索引碎片.

 

生产环境中有个job是定期收缩数据库,最近发现性能急剧下降,检查发现是多数Index存有严重的碎片,但每周都有一个Rebuild Index

的job,理论上不该出现严重的碎片问题。最后才发现时dbcc shrinkdatabase的原因。以下是问题重现步骤:

 

 

结果如下:此时avg_fragmentation_in_percent值为0.9.

 

 

再看页面分配情况:

可以见到tb1,tb2几乎没有任何碎片,页面分配很整齐.

 

 

 

干掉tb1,腾出可用空间.

 

结果如下:

 

此时avg_fragmentation_in_percent值已经变成为98.1!!!

 

再看页面分配情况:

表面看上去没什么问题,页面分配也很完整,但是依顺序打开页面查看具体资料时却出现了重大问题,索引顺序完全反了!!!

 

 

176页(id =1000):

 

 

177页(id=999):

 

 

结论:

DBCC ShrinkDatabase收缩数据文件时,会依据GAM页面资讯尽量将尾部的数据页面往前面的空余页面挪动,由于Index页面之间是有Double-link双向链接的,这样就会破坏页面物理跟索引逻辑的关系,导致了索引碎片的产生。

 

 

 

 

以上,仅用于自我备忘。

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值