
Помимо траты места в базе данных, ненужные индексы на SQL Server могут замедлить операции вставки и обновления. Разработчики, не имеющие опыта в принципах работы с базами данных, иногда склонны создавать индексы таблиц, которые не имеют смысла для выполняемых запросов.
Существует ли общая процедура или инструмент для SQL Server 2005/2008 для анализа рабочей нагрузки базы данных и предоставления подсказок о том, какие индексы либо никогда не используются, либо не нужны в определенной операционной базе данных?
Спасибо!
решение1
Я вижу здесь симпатичный маленький скрипт T-SQL (http://blog.sqlauthority.com/2008/02/11/sql-server-2005-find-unused-indexes-of-current-database/) для отображения неиспользуемых индексов, которые должны работать на SQL Server 2005. Еще одинhttp://aspadvice.com/blogs/ssmith/archive/2008/03/31/Find-Unused-SQL-2005-Indexes-for-Current-DB.aspxздесь тоже.
Похоже, что dm_db_index_usage_stats — это ключ ко всему этому. Довольно здорово! (См.http://msdn.microsoft.com/en-us/library/ms188755.aspx Мне придется взглянуть на некоторые созданные мной производственные базы данных, чтобы увидеть, как выглядит эта статистика. (улыбка)
Редактировать: Вот очень хороший дополнительный фон:http://blogs.msdn.com/craigfr/archive/2008/10/30/what-is-the-difference-between-sys-dm-db-index-usage-stats-and-sys-dm-db-index-operational-stats.aspx
решение2
Несколько вещей, которые следует иметь в виду при использовании sys.dm_db_index_usage_stats:
- Вывод содержит только индексы, которые использовались с момента последнего запуска базы данных. Когда база данных останавливается, все записи из кэша информации в памяти для этой базы данных удаляются. Аналогично, кэш не выдерживает мгновенного перезапуска. Невозможно вручную очистить записи для конкретной базы данных без перезапуска базы данных. Различные статьи, на которые есть ссылки в первом ответе (а также в моем блоге), описывают, как захватывать вывод в разное время для проведения анализа временных рядов.
- Обязательно проверьте свойвесьБизнес-цикл. Вы не хотите удалять индекс, который используется для отчета на конец месяца или запроса генерального директора, даже если это может быть заманчиво.
- Прежде чем принять решение о том, используется ли индекс с выгодой или просто поддерживается за счет расходов, убедитесь, что вы понимаете различные показатели и их значение.
Надеюсь это поможет.
P.S. Еще одно замечание для тех, кто читает это и интересуется, есть ли эквивалентный метод для SQL Server 2000: нет, мы (так как я в то время был в команде) добавили эту возможность только для версии 2005 и более поздних версий.
решение3
У нас есть статья в вики на SQLServerPedia со скриптом, который это делает, а также обучающее видео о том, как его использовать:
Один для поиска неиспользуемых индексов:
http://sqlserverpedia.com/wiki/Найти_не_используемые_индексы
И еще один, чтобы найти индексы, которые вы должны добавить:
решение4
Я сделал несколько запросов, связанных с индексом, и показал это в своем блоге (http://dbalink.wordpress.com/2008/11/09/how-to-finding-index-usage-stats-with-dmv-in-tsql/)