Sqlserver的表沒有高水位但是有碎片的概念,sqlserver表的碎片的檢視和整理方法

lusklusklusk發表於2020-12-24

官方文件




1、雖然官方推薦使用sys.dm_db_index_physical_stats來代替DBCC SHOWCONTIG檢視碎片資訊,但是DBCC SHOWCONTIG顯示出來的結果還是更直觀些
2、如果表有聚集索引,表就是索引組織表,對錶進行碎片整理,使用ALTER INDEX ALL ON Table_Name REORGANIZE就行
3、如果表沒有聚集索引,表就是堆表,對錶進行碎片整理,如果ALTER INDEX ALL ON Table_Name REORGANIZE沒有達到效果,就再使用alter table table_name REBUILD WITH ( <rebuild_option> )




查詢wondb庫下dbo.RSMsi1的碎片資訊
方法1:使用DBCC SHOWCONTIG ,Avg. Page Density (full)越小,碎片越大

DBCC SHOWCONTIG ('wondb.dbo.RSMsi1');
DBCC SHOWCONTIG scanning 'RsmSi1' table...
Table: 'RsmSi1' (1419152101); index ID: 1, database ID: 24
TABLE level scan performed.
- Pages Scanned................................: 3728
- Extents Scanned..............................: 452
- Extent Switches..............................: 351
- Avg. Pages per Extent........................: 7.8
- Scan Density [Best Count:Actual Count].......: 98.41% [248:252]
- Logical Scan Fragmentation ..................: 0.40%
- Extent Scan Fragmentation ...................: 4.37%
- Avg. Bytes Free per Page.....................: 800.4
- Avg. Page Density (full).....................: 60.11%
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

方法2:使用sys.dm_db_index_physical_stats

use wondb;--以下語句需要在當前資料庫下執行
select index_type_desc,avg_fragment_size_in_pages,page_count,avg_fragmentation_in_percent 
from sys.dm_db_index_physical_stats (db_id(), object_id ('RSMsi1'), default, default, default)  
index_type_desc    avg_fragment_size_in_pages    page_count    avg_fragmentation_in_percent
CLUSTERED INDEX    164.833333333333    3728    0.404448938321537
NONCLUSTERED INDEX    159.818181818182    3721    0.341296928327645




整理wondb庫下dbo.RSMsi1的碎片
方法1:重新組織索引而非重建索引,REORGANIZE重新組織索引不會引發堵塞,再收集統計資訊

USE WONDB;
GO
ALTER INDEX ALL ON [dbo].[RSMsi1] REORGANIZE ;
GO
UPDATE STATISTICS [dbo].[RSMsi1];
GO

再檢視碎片資訊
DBCC SHOWCONTIG (RSMsi1);

DBCC SHOWCONTIG scanning 'RsmSi1' table...
Table: 'RsmSi1' (1419152101); index ID: 1, database ID: 24
TABLE level scan performed.
- Pages Scanned................................: 1978
- Extents Scanned..............................: 249
- Extent Switches..............................: 248
- Avg. Pages per Extent........................: 7.9
- Scan Density [Best Count:Actual Count].......: 99.60% [248:249]
- Logical Scan Fragmentation ..................: 0.35%
- Extent Scan Fragmentation ...................: 6.83%
- Avg. Bytes Free per Page.....................: 800.4
- Avg. Page Density (full).....................: 90.11%
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

select index_type_desc,avg_fragment_size_in_pages,page_count,avg_fragmentation_in_percent from sys.dm_db_index_physical_stats (db_id(), object_id ('RSMsi1'), default, default, default)  

index_type_desc    avg_fragment_size_in_pages    page_count    avg_fragmentation_in_percent
CLUSTERED INDEX    104.105263157895    1978    0.353892821031345
NONCLUSTERED INDEX    103.411764705882    1758    0.341296928327645



方法2:再對錶執行rebuild操作
alter table RSMsi1 rebuild with (>
REBUILD WITH ( <rebuild_option> )
如果表具有聚集索引,則 REBUILD 選項將重新生成該聚集索引。 REBUILD 可以為 ONLINE 操作。
如果表沒有聚集索引,堆結構只受部分選項影響。

再檢視碎片資訊
DBCC SHOWCONTIG (RSMsi1);

DBCC SHOWCONTIG scanning 'RsmSi1' table...
Table: 'RsmSi1' (1419152101); index ID: 1, database ID: 24
TABLE level scan performed.
- Pages Scanned................................: 1978
- Extents Scanned..............................: 252
- Extent Switches..............................: 251
- Avg. Pages per Extent........................: 7.8
- Scan Density [Best Count:Actual Count].......: 98.41% [248:252]
- Logical Scan Fragmentation ..................: 0.40%
- Extent Scan Fragmentation ...................: 4.37%
- Avg. Bytes Free per Page.....................: 800.4
- Avg. Page Density (full).....................: 90.11%
DBCC execution completed. If DBCC printed error messages, contact your system administrator.


select index_type_desc,avg_fragment_size_in_pages,page_count,avg_fragmentation_in_percent from sys.dm_db_index_physical_stats (db_id(), object_id ('RSMsi'), default, default, default)  

index_type_desc    avg_fragment_size_in_pages    page_count    avg_fragmentation_in_percent
CLUSTERED INDEX    164.833333333333    1978    0.404448938321537
NONCLUSTERED INDEX    103.411764705882    1758    0.341296928327645


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2745081/,如需轉載,請註明出處,否則將追究法律責任。

相關文章