一.概述

    索引填充因子功用:提供填充因子选项是为着优化索引数据存款和储蓄和总体性。 当创立或重复生成索引时,填充因子的值可规定每一个叶级页上要填写数据的空间百分比,以便在每一页上保存部分剩下存款和储蓄空间作为现在扩大索引的可用空间,比方:钦点填充因子的值为
80 表示种种叶级页元帅有 十分之二的空中保留为空,以便随着向基础表中添扩大少而为扩展索引提供空间。

  填充因子的值是 1 到 100
之间的比例,服务器范围的暗许值为
0,那意味着将完全填充叶级页。

 1.1
页拆分现象

   根据数量的查询和修改的比重,精确抉择填充因子值,可提供丰富的空间,以便随着向基础表中添增添少而扩张索引,进而减弱页拆分的只怕性。假诺向已满的索引页增多新行(新行地点依照键排序准则,能够是页中肆意行地方), 数据库引擎将把大约50%的行移到新页中,以便为该新行腾出空间。 这种重组称为页拆分。页拆分可为新记录腾出空间,然而进行页拆分大概须求花费自然的时辰,此操作会消耗多量能源。 其他,它还大概产生碎片,进而导致 I/O
操作增加。 尽管日常发生页拆分(或许过sys.dm_db_index_physical_stats
来查看页拆分景况),可经过动用新的或现成的填写因子值来重新生成索引,进而再度分发数据。

  填充钱设置过低: 优点是
插入或改造时裁减页的拆分次数。劣点是
会使索引必要越来越多的存放空间,况兼会下滑读取品质。

  填充钱设置过高: 优点是
如果每叁个索引页数据都全体填满,此时select作用最高。短处是
插入或退换时必要活动前边全体页,功能低。

目录碎片:

二. 碎片与填充因子案例

   上边分析在生育情形下,对长日子三个表的ix_1索引进行分析。

-- 有一个PUB_Search_ResultVersions2表长期有增删改操作, 在很长一段时间运行后,查看碎片如下
dbcc SHOWCONTIG (PUB_Search_ResultVersions2,'ix_1')

  4503.com 1

    通过上海体育场面能够领会到平均页密度是29.74%,也便是在那之中碎片太多,现四个页的多少存款和储蓄量才是符合规律多个页的存储量。扫描的页数是703页,涉及到了1九十二个区。下边重新维护索引

--重建索引
ALTER INDEX ix_1 ON dbo.PUB_Search_ResultVersions2 REBUILD

  4503.com 2

     通过上海教室可以看来,扫描页数唯有了248页(原本是703页)
用了36区(原本是1玖拾三个区),现等于一页的实在多少是前边三页的总数,
查询将会缩减了汪洋的I/O扫描。

  假如频仍的增加和删除改,最佳设置填充因子,默许是0,也正是百分百,
借使有新索引键排序后,挤入到四个已填满8060字节的页中时,就能够产生页拆分,产生碎片,这里自身使用图形分界面来安装填充因子为85%(最佳通过t-sql来安装,做运转自动尊敬),再重新建立下索引使设置生效。

  4503.com 3

  下图能够看来平均页密度是85%,填充因子设置生效。能够在通过sys.dm_db_index_physical_stats重新查看该索引页使用数据。

4503.com 4

  • 里头碎片(或说叶级填充率):反映数据叶级的空中占用率或空闲率
  • 表面碎片:由于sqlserver以三翻五次的8个page作为三个数目库块(区)extent作为读取单位,故此由于大意存储上的区和逻辑上不均等(不接二连三)而导致io读取切换

 

  • 逻辑碎片:那是索引的叶级页中出错页所占的比重。对于出错页,分配给索引的下一个物理页不是由目前叶级页中的“下一页”指针所针对的页
  • 区碎片:那是堆的叶级页中出错区所占的百分比。出错区是指:富含堆的当前页的区不是情理上的盈盈前一页的区后的下二个区。(微软真不会分解概念:(

 

询问碎片情状:

  1.   dbcc showcontig:四片段指标名,【索引名】|【索引id】
  2.   dbcc showcontig:当前库对象id,【索引名】|【索引id】    
  3.   sys.dm_db_index_physical_stats:数据库id,对象id,索引id,分区id,扫描方式
      • 八个参数,基本上,【0(特殊的,index可感觉0,故该处为-1)】|【null】|【default】
        意义是同样的

 

基本目的:

  1. 环视密度(%)[最好计数:实际计数]:那是“最佳计数”与“实际计数”的比值。假若全部剧情都以三回九转的,则该值为
    100;假设该值小于
    100,则设有部分零碎。“最棒计数”是指在整个都两次三番链接的事态下,区更换的美妙数目。“实际计数”是指区改造的其实次数。
  2. 逻辑扫描碎片(%):扫描索引的叶级页时重返的出错页的比重。此数与堆毫无干系。对于出错页,分配给索引的下一个物理页不是由近些日子叶级页中的“下一页”指针所指向的页。
  3. 区扫描碎片(%):扫描索引的叶级页时出错区所占的比重。此数与堆非亲非故。对于出错区,包括当前索引页的区在物理上不是含有上二个索引页的区的下一个区。注意:
    假如索引凌驾多少个文件,则此数字抽象。
  4. avg_page_space_used_in_percent:平均page空间使用率。相关的定义:页拆分、页填充率
  5. avg_fragment_size_in_pages:平均多少个page就有贰个碎片,该值
    越大越好
  6. avg_fragmentation_in_percent:碎片率,不表明。该值越小越好,和avg_fragment_size_in_pages
    反比!
  7. page_count:扫描的总page数
  8. record_count:扫描的总记录数。注意:是对峙于当下的扫描来讲的记录数,不必然是你所以为的
    客户表的一整套数据
  9. forwarded_record_count:页拆分的笔录数据