Ниже представлен скрипт, показывающий фрагментация всех индексов всех таблиц базы даннных MS SQL Server:
SELECT object_id AS objectid, index_id AS indexid,
index_type_desc,
partition_number AS partitionnum, convert(decimal(10,2),avg_fragmentation_in_percent) AS frag, -- процент фрагментации
convert(decimal(10,2),((page_count*8192.)/1024)/1024) as [Size(kb)] -- размер индекса в кб
INTO #work_table
FROM sys.dm_db_index_physical_stats (DB_ID(),0, NULL , NULL, 'LIMITED')
--WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0;
SELECT
object_schema_name([objectid])+'.'+OBJECT_NAME(objectid) as tblname,(select Name from sys.indexes
where sys.indexes.index_id=#work_table.indexid and
sys.indexes.object_id=#work_table.objectid) as indname,
indexid,index_type_desc,
--partitionnum,
frag,[Size(kb)] FROM #work_table
order by tblname,frag desc
--,tblname
go
drop table #work_table
Меняя параметр функции sys.dm_db_index_physical_stats можно получать информацию по конкретной таблице:
sys.dm_db_index_physical_stats (DB_ID(),OBJECT_ID('dbo.table_name'),null , NULL, 'LIMITED')
Раскоментировав условие выборки:
--WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0;
получим индексы с котормы необходимо произвести обслуживание: перестроение или реорганизацию, при этом учитывая размер индекса.
Комментариев нет :
Отправить комментарий