пятница, 26 октября 2012 г.

Фрагментация всех индексов таблиц базы данных

Ниже представлен скрипт, показывающий фрагментация всех индексов всех таблиц базы даннных 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;
получим индексы с котормы необходимо произвести обслуживание: перестроение или реорганизацию, при этом учитывая размер индекса.

 

Комментариев нет :

Отправить комментарий