2010-03-22 47 views
6

对于初学者,我不是DBA,我正在重建索引。重建索引不会更改非聚簇索引的碎片百分比

我利用msdn中令人惊叹的TSQL脚本来根据dm_db_index_physical_stats返回的碎片百分比来改变索引,如果碎片百分比大于30,那么做一个REBUILD或做一个REORGANIZE。

我发现的是,在第一次迭代中,有87个需要defrag的记录。我运行了脚本,并且所有87个索引(非聚集的集群&)都被重建或重新编制索引。当我从dm_db_index_physical_stats获得统计信息时,仍然有27条记录需要碎片整理,所有这些记录都是非集群索引。所有的聚集索引都是固定的。

无论我运行脚本来整理这些记录多少次,我仍然会使用相同的索引进行扫描,其中大部分使用相同的碎片百分比。此后似乎没有任何变化。

注意:在这些迭代过程中,我没有执行任何插入/更新/删除操作。仍然重建/重组没有导致任何改变。

更多信息:在MSDN http://msdn.microsoft.com/en-us/library/ms188917.aspx

使用SQL 2008 脚本可用能否请你解释为什么这些共有27条记录非聚集索引没有被改变/修改?

对此的任何帮助将不胜感激。

Nod

+0

你可以用pelase提供输出27的其中一个统计作为例子吗? – TomTom 2010-03-22 06:49:16

+0

我粘贴了3次迭代的索引结果之一。 第一次迭代改变了碎片%有点,第二和第三次没有影响。 指数= [IX_BatchNumber] 片段%由dm_db_index_physical_stats返回 迭代1 = 52.6315789473684 迭代2 = 41.1764705882353 迭代3 = 41.1764705882353 \t 还有其他indteresting实例中的第一个磁盘碎片整理之前,其中在破碎%值为30并在旁边跳到40,并永远停留在那里。但这只发生了几个记录。谢谢。 – Noddy 2010-03-22 23:36:08

回答

12

SQL Server不会重建不够大的索引。查看一下fragment_count(这是sys.dm_db_index_physical_stats视图中的一个字段),对于这27个索引来说可能很低。

+0

我有一个超过一百万页的索引有相同的问题,并且是31%碎片。真的想要一个答案。 – 2013-02-12 21:41:26

+0

仅供参考请参阅dba.stackexchange.com上的答案:http://dba.stackexchange.com/questions/18372/why-index-rebuild-does-not-reduce-index-fragmentatation – 2014-02-17 20:32:31

相关问题