Show table fragmentation on TSQL – 如何顯示 MSSQL Table 上有沒有碎片呢?

上週老闆希望把我負責的程式更新多一些Summary 的功能..
其實這一個程式已經很久沒有更新了… [大概兩年多]
所以回看這一個程式..感覺到自己當時的技術有幾差

今次要增加的功能很多都是和Database有關的..
為了提高效能..
所以都想學習多一些多Database Maintenance 資料庫維護
和看看怎樣可以提升Query的速度和效能
首先..當然是要看看將會使用到的Table 上的資料data/和表Table上的碎片有幾分散..
如果分散得大的話使要進行Index Rebuild
有興趣的朋友可以參考以下的網誌

TSQL Defrag index in a table – MSSQL重建資料表的索引 

今天想和大家介紹一個有用的SQL Command
就是用來查看資料庫上的Table/表上的資料和Index索引的碎片資料的..
大家可以使用以下的Command

DBCC SHOWCONTIG ("Table name");

--E.G.
DBCC SHOWCONTIG (ShareChiWai_SampleTable);

之後便會出現和下面相似的結果
DBCC SHOWCONTIG result
DBCC SHOWCONTIG scanning ‘ShareChiWai_SampleTable’ table…
Table: ‘ShareChiWai_SampleTable’ (43147199); index ID: 1, database ID: 5
TABLE level scan performed.
– Pages Scanned…………………………..: 41
– Extents Scanned…………………………: 11
– Extent Switches…………………………: 10
– Avg. Pages per Extent……………………: 3.7
– Scan Density [Best Count:Actual Count]…….: 54.55% [6:11]
– Logical Scan Fragmentation ………………: 17.07%
– Extent Scan Fragmentation ……………….: 54.55%
– Avg. Bytes Free per Page…………………: 92.5
– Avg. Page Density (full)…………………: 98.86%
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

以下是這些結果的意思

Statistic Description
Pages Scanned Number of pages in the table or index.
資料表或索引中的頁數。
Extents Scanned Number of extents in the table or index.
資料表或索引中的範圍數目。
Extent Switches Number of times the DBCC statement moved from one extent to another while the statement traversed the pages of the table or index.
當 DBCC 陳述式往返資料表或索引頁面時,在各範圍之間的移動次數。
Avg. Pages per Extent Number of pages per extent in the page chain.
在頁面鏈結中,每個範圍的頁數。
Scan Density [Best Count: Actual Count] Is a percentage. It is the ratio Best Count to Actual Count. This value is 100 if everything is contiguous; if this value is less than 100, some fragmentation exists.
這是一個百分比。 它是最佳次數實際次數的比例。 如果每個項目都是連續的,這個值就是 100;如果這個值小於 100,就會有某些片段存在。Best Count is the ideal number of extent changes if everything is contiguously linked. Actual Count is the actual number of extent changes.
最佳次數是每個項目都連續連結時,理想的範圍變更數目。 實際次數是實際的範圍變更數目。
Logical Scan Fragmentation Percentage of out-of-order pages returned from scanning the leaf pages of an index. This number is not relevant to heaps. An out-of-order page is a page for which the next physical page allocated to the index is not the page pointed to by the next-page pointer in the current leaf page.
掃描索引分葉頁時所傳回失序頁面的百分比。 這個數字與堆積無關。 失序頁面是指配置給索引之下一個實體頁面的頁面,並不是目前分葉頁中下一頁指標所指向的頁面。
Extent Scan Fragmentation Percentage of out-of-order extents in scanning the leaf pages of an index. This number is not relevant to heaps. An out-of-order extent is one for which the extent that contains the current page for an index is not physically the next extent after the extent that contains the previous page for an index.
掃描索引分葉頁時之失序範圍的百分比。 這個數字與堆積無關。 失序範圍是索引目前頁面所在之範圍,實際上不是索引上一頁所在範圍之下一範圍的範圍。
Avg. Bytes Free per Page Average number of free bytes on the pages scanned. The larger the number, the less full the pages are. Lower numbers are better if the index will not have many random inserts. This number is also affected by row size; a large row size can cause a larger number.
掃描頁面的平均可用位元組數。 數目愈大,頁面的飽和度愈低。 如果索引沒有許多隨機的插入,數目低會比較好。 這個數目也受到資料列大小的影響;資料列愈大,這個數目也愈大。
Avg. Page density (full) Average page density, as a percentage. This value takes into account row size. Therefore, the value is a more accurate indication of how full your pages are. The larger the percentage, the better.
平均頁面密度,這是一個百分比。 這個值將資料列大小考慮在內。 因此,這個值是更精確的頁面飽和度指示。 百分比愈大,愈好

詳情可以參考以下URL
http://msdn.microsoft.com/zh-tw/library/ms175008.aspx

Hope you find it useful

One thought on “Show table fragmentation on TSQL – 如何顯示 MSSQL Table 上有沒有碎片呢?

  1. Pingback: TSQL Defrag index in a table – MSSQL重建資料表的索引 | Share ChiWai/Share 智慧/智慧分享 – 技術分享/Tech Blog

Leave a Reply