Để kiểm tra phân mảnh trong năm 2005/2008, bạn có thể sử dụng tập lệnh sau. Bạn cần đặt @DB
và @Table
các giá trị. Nếu bạn xác định những cái NULL
đó thì nó sẽ chạy trên tất cả các cơ sở dữ liệu và / hoặc tất cả các bảng. Nếu bạn thực hiện một db duy nhất, hãy đảm bảo bạn thực thi trong ngữ cảnh của DB đó ( USE MyDB
).
SELECT
object_name(IPS.object_id) AS [Table Name],
SI.name AS [Index Name],
CASE IPS.Index_type_desc
WHEN 'CLUSTERED INDEX' THEN 'Clustered'
ELSE 'Non-Clustered'
END AS 'Index Type',
IPS.avg_fragmentation_in_percent as 'Avg Fragmentation (%)',
IPS.avg_fragment_size_in_pages as 'Avg Frag Size (pages)',
IPS.page_count as 'Page Count',
IPS.forwarded_record_count as 'Forwarded Records',
--IPS.avg_page_space_used_in_percent as 'Avg Page Space Used (%)',
--IPS.record_count as 'Record Count',
--IPS.ghost_record_count as 'Ghost Record Count',
IPS.fragment_count as 'Fragment Count'
FROM sys.dm_db_index_physical_stats
(
db_id(@DB),
OBJECT_ID(@Table),
NULL,
NULL ,
'LIMITED'
) as IPS
JOIN sys.indexes as SI WITH (nolock)
ON IPS.object_id = SI.object_id
AND IPS.index_id = SI.index_id
ORDER BY 1,3,5
Để tự động thu nhỏ, bạn chỉ cần kiểm tra master.sys.databases
:
select * from master.sys.databases
where is_auto_shrink_on = 1
sys
db?