索引碎片

 

索引碎片分为外部碎片和内部碎片。

外部碎片:

又称平均碎片百分比,或逻辑碎片。是指在分页的逻辑顺序与物理顺序不匹配或者索引拥有的扩展不

连续时产生。包括以下两种:

逻辑碎片:这是索引的叶级页中出错页所占的百分比。出错页是指在IAM 中所指示的下一页不同于由叶级页中的下一页指针所指向的页。

区碎片(有的书翻译成:扩展碎片):这是堆的叶级页中出错区所占的百分比。出错区是指:包含堆的当前页的区不是物理上的包含前一页的区后的下一个区。

这种碎片对索引的有序扫描操作具有非常显著的影响。它会对那些不依赖于索引链接的列表的操作(例如:查找操作,lookup操作,无序扫描)不产生影响。

对应sys.dm_db_index_physical_stats的列avg_fragmentation_in_percent 。因此为了获得最佳性能,avg_fragmentation_in_percent 的值应尽可能接近零。

但是,从0 到10%范围内的值都可以接受。所有减少碎片的方法(例如重新生成、重新组织或重新创建)都可用于降低这些值。


内部碎片:又称为平均页密度。是指索引正在占有超过它实际所需的空间大小。它具有两面型:低百分比会对读取数据的查询产生负面影响,会涉及更多读取操作,因为如果页被填充满的话,只需读取更少的页;另一方面,如果如果在创建索引时设置一个较低的填充因子,就可以避免当插入更多记录而不必进行页拆分。

微软建议索引碎片率在5%到30%之间,做索引重组;碎片率超过30%,做索引重建工作。

 

解决方法
ALTER INDEX  indexname ON tablename REBUILD

 

      使用这个语句同样也是重建索引,但是通过动态重建索引而不需要卸载并重建索引.是优于前两种方法的,但依旧会造成阻塞。可以通过ONLINE关键字减少锁,但会造成重建时间加长.
 
ALTER INDEX  indexname ON tablename  REORGANIZE

 

      这种方式不会重建索引,也不会生成新的页,仅仅是整理,当遇到加锁的页时跳过,所以不会造成阻塞。但同时,整理效果比rebuld差.
 
avg_fragmentation_in_percent:索引碎片百分比,如果碎片小于10%~20%,碎片不太可能会成为问题,如果索引碎片在20%~40%,碎片可能成为问题,
但是可以通过索引重组(DROP_EXISTING) 来消除索引解决,大规模的碎片(当碎片大于40%),可能要求索引重建(DBCC DBREINDEX)。
 
 
 
在产品环境中重建索引需要十分小心,原因是:
    • 重建索引会消耗大量的系统I/O读写资源。
    • 重建索引会导致查询进程的死锁或者锁等待,尤其是非企业版SQL Server(企业版可以使用ONLINE选项来最大限度规避这个问题)。
    • 重建索引会导致数据库日志文件暴涨,而因此会给Database Mirroring、Log Shipping和Backup带来压力。
    • 因为Rebuild Indexes是一个IO密集型的操作,所以会非常消耗IO,所以,请选择业务低谷期进行索引碎片重整的操作。

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值