Metrika

5 марта 2011 г.

Ухаживаем за индексами в SQL Server

Периодически индексы надо ребилдить или реорганизовывать. Выбор, что применять, делается по проценту фрагментации индекса.

Посмотреть процент фрагментации индексов в базе данных можно с помощью запроса:
use DB_NAME 


SELECT ps.database_id, ps.OBJECT_ID, o.name table_name,
ps.index_id, b.name,
ps.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS ps
INNER JOIN sys.indexes AS b ON ps.OBJECT_ID = b.OBJECT_ID
INNER JOIN sys.objects o ON b.OBJECT_ID = o.OBJECT_ID
AND ps.index_id = b.index_id
WHERE ps.database_id = DB_ID()
ORDER BY ps.avg_fragmentation_in_percent desc
 Если фрагментация больше 30%, то ребилдим:
ALTER INDEX ALL ON table_name REBUILD
Эта команда ребилдит все индексы в таблице. Вместо ALL можно поставить имя индекса, тогда ребилдиться будет только он.

Если фрагментация 5%-30%, то реорганизуем:
ALTER INDEX ALL ON table_name REORGANIZE
Естественно, проценты не жесткие, все зависит от ситуации и собственного мнения DBA.

В первоисточнике можно почитать тут: http://msdn.microsoft.com/en-us/library/ms189858.aspx

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

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