2010-03-22 90 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