Skip to content

Обработка неиспользуемых индексов

Пересказ статьи Chad Callihan. Handling Unused Indexes


Что делать, если вы видите, что индекс обновляется, но с ним мало выполняется операций поиска и сканирования? Следует ли вам удалить его, поскольку к таблице нет запросов, или выбирается лучший индекс? Если индекс не имеет обновлений, поиска или сканирования, нужно ли его тогда удалять?
Ответ на эти вопросы: "Пока нет!" Избавление от индекса, который не так часто используется, кажется простым, но требует тщательного изучения.

Проверка использования индекса


Для проверки, что индекс не используется, можно применить следующий скрипт:

SELECT object_name(s.object_id) AS 'Object_Name'
,i.name AS 'Index_Name'
,s.user_seeks AS 'User_Seeks'
,s.user_scans AS 'User_Scans'
,s.user_lookups AS 'User_Lookups'
,s.user_updates AS 'User_Updates'
FROM sys.dm_db_index_usage_stats s
INNER JOIN sys.indexes i ON i.object_id = s.object_id
AND i.index_id = s.index_id
WHERE objectproperty(s.object_id, 'IsUserTable') = 1;
GO

Никогда не выполняйте запросы проверки индексов, проверки того, что кажется неиспользуемым, чтобы начать удалять индексы. Информация об использовании индекса не хранится за все время. Даже если вы вернулись в офис после длинных выходных, и конкретный индекс, который вы проверяете, не появился среди используемых, следует, по крайней мере, проверить сначала потенциальные причины этого.

Не перезапускался ли недавно SQL Server?


Статистика в dm_db_index_usage_stats сбрасывается при перезапуске SQL Server. Если вы видите очень мало информации в dm_db_index_usage_stats, причиной может быть недавняя перезагрузка сервера для установки патча или из-за другой проблемы, которая привела к перезапуску SQL Server. Это одна из многих причин, почему важно знать расписание перезагрузок сервера.

Когда используется индекс?


Возможно, вы проверяете индексы в конце месяца и обнаруживаете индекс, который обновлялся, но не имел сканирований или поиска в нем. Вы решаете отключить его, и уходите домой на выходные. При возвращении в офис вы понимаете, что есть ежемесячное задание, которое полагается на этот индекс, и вся обработка, которую предполагалось выполнить к понедельнику, не завершена. Запомните, только то, что индекс не используется часто, не означает его бесполезность.

Отключение перед удалением


Обратите внимание, что я сказал отключение, а не удаление. Когда вы уверены, что индекс не нужен, начните с отключения индекса, а не его удаления. Когда индекс отключен, и ваша уверенность в том, что он не нужен, возрастет, тогда можно перейти к удалению.

Если мы хотим отключть индекс IX_Test на таблице Users, это можно сделать, выполнив щелчок правой кнопкой и выбрав команду Disable:



или с помощью следующего кода:

ALTER INDEX IX_Test ON Users DISABLE;

Если мы вскоре столкнемся с проблемой, вызванной недоступностью индекса, он все еще будет находиться в списке индексов, и мы можем быть уверены в его возвращении. Вы можете заметить, что тут нет соответствующей команды Enable (включить). Чтобы вернуть индекс, вам нужно будет перестроить его либо с помощью выбора команды Rebuild в контекстном меню:



либо выполнив следующее:

ALTER INDEX IX_Test ON Users REBUILD;


Перестройка отключенного индекса может потребовать некоторого времени; однако ожидание окончания перестройки индекса гораздо менее утомительно, чем размышление о том, какое определение индекса было изначально.

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.