當(dāng)索引所在頁(yè)面的基于主關(guān)鍵字的邏輯順序,和數(shù)據(jù)文件中的物理順序不匹配時(shí),碎片就產(chǎn)生了。所有的葉級(jí)頁(yè)包含了指向前一個(gè)和后一個(gè)頁(yè)的指針。這樣就形成一個(gè)雙鏈表。理想情況下,數(shù)據(jù)文件中頁(yè)的物理順序會(huì)和邏輯順序匹配。整個(gè)磁盤的工作性能在物理順序匹配邏輯順序時(shí)將顯著提升。對(duì)某些特定的查詢而言,這將帶來(lái)極佳的性能。當(dāng)物理排序和邏輯排序不匹配時(shí),磁盤的工作性能會(huì)變得低效,這是因?yàn)榇蓬^必須向前和向后移動(dòng)來(lái)查找索引,而不是只象某個(gè)單一方向來(lái)搜索。碎片會(huì)影響I/O性能,不過(guò)對(duì)于位于SQL Server數(shù)據(jù)緩沖內(nèi)的數(shù)據(jù)頁(yè)而言,碎片并不會(huì)帶來(lái)任何影響。
在索引碎片整理前,請(qǐng)確保系統(tǒng)資源的一些問(wèn)題,比如物理磁盤碎片,不合理的基礎(chǔ)結(jié)構(gòu)等因素會(huì)給性能帶來(lái)負(fù)面影響,參看KB935089:使用 Defrag 管理器可以 such as Exchange Server 或 SQL Server 數(shù)據(jù)庫(kù)服務(wù)器的卷進(jìn)行碎片整理。
DBCC SHOWCONTIG是顯示指定的表的數(shù)據(jù)和索引的碎片信息。當(dāng)運(yùn)行該命令時(shí),要特別注意邏輯碎片(Logical Fragmentation)和頁(yè)密度(Page Density)兩個(gè)指標(biāo)。
Page Scanned-掃描頁(yè)數(shù):如果你知道行的近似尺寸和表或索引里的行數(shù),那么你可以估計(jì)出索引里的頁(yè)數(shù)。看看掃描頁(yè)數(shù),如果明顯比你估計(jì)的頁(yè)數(shù)要高,說(shuō)明存在內(nèi)部碎片。
Extents Scanned-掃描擴(kuò)展盤區(qū)數(shù):用掃描頁(yè)數(shù)除以8,四舍五入到下一個(gè)最高值。該值應(yīng)該和DBCC SHOWCONTIG返回的掃描擴(kuò)展盤區(qū)數(shù)一致。如果DBCC SHOWCONTIG返回的數(shù)高,說(shuō)明存在外部碎片。碎片的嚴(yán)重程度依賴于剛才顯示的值比估計(jì)值高多少。
Extent Switches-擴(kuò)展盤區(qū)開關(guān)數(shù):該數(shù)應(yīng)該等于掃描擴(kuò)展盤區(qū)數(shù)減1。高了則說(shuō)明有外部碎片。
Avg. Pages per Extent-每個(gè)擴(kuò)展盤區(qū)上的平均頁(yè)數(shù):該數(shù)是掃描頁(yè)數(shù)除以掃描擴(kuò)展盤區(qū)數(shù),一般是8。小于8說(shuō)明有外部碎片。
Scan Density [Best Count:Actual Count]-掃描密度[最佳值:實(shí)際值]:DBCC SHOWCONTIG返回最有用的一個(gè)百分比。這是擴(kuò)展盤區(qū)的最佳值和實(shí)際值的比率。該百分比應(yīng)該盡可能靠近100%。低了則說(shuō)明有外部碎片。
Logical Scan Fragmentation-邏輯掃描碎片:無(wú)序頁(yè)的百分比。該百分比應(yīng)該在0%到10%之間,高了則說(shuō)明有外部碎片。
Extent Scan Fragmentation-擴(kuò)展盤區(qū)掃描碎片:無(wú)序擴(kuò)展盤區(qū)在掃描索引葉級(jí)頁(yè)中所占的百分比。該百分比應(yīng)該是0%,高了則說(shuō)明有外部碎片。
Avg. Bytes Free per Page-每頁(yè)上的平均可用字節(jié)數(shù):所掃描的頁(yè)上的平均可用字節(jié)數(shù)。越高說(shuō)明有內(nèi)部碎片,不過(guò)在你用這個(gè)數(shù)字決定是否有內(nèi)部碎片之前,應(yīng)該考慮fill factor(填充因子)。
Avg. Page Density (full)-平均頁(yè)密度(完整):每頁(yè)上的平均可用字節(jié)數(shù)的百分比的相反數(shù)。低的百分比說(shuō)明有內(nèi)部碎片。