sys.dm_db_missing_index_details не возвращает строк

Я попытался просмотреть sys.dm_db_missing_index_details, чтобы проверить наличие отсутствующих индексов в моей базе данных SQL Server 2005. Он не возвращает строк.

Вполне возможно, что он должен быть пустым, но крайне маловероятным, поскольку я не добавил НИКАКИХ индексов ни в одну таблицу (кроме тех, которые вы получаете, создавая первичные ключи). Я также запускаю модульные тесты, а также специальные тесты разработки (с использованием Linq to SQL), так что есть некоторая активность против него.

Нужно ли включать сбор этих данных?

Поддерживается ли это только в определенных выпусках SQL Server 2005?

Заранее спасибо за любые усилия, чтобы помочь.

2 ответа

Похоже, что он включен по умолчанию - хотя проверьте любой ярлык, который вы используете для запуска, и убедитесь, что он не запускается с -x

С http://msdn.microsoft.com/en-us/library/ms345524(v=SQL.90).aspx

Эту функцию можно отключить, только если экземпляр SQL Server запущен с помощью аргумента -x с утилитой командной строки sqlservr.

Также вам нужно знать, что таблица заполняется при выполнении запросов, если SQL Server использует оптимизатор запросов - эта таблица очищается при перезапуске SQL Server.

С http://msdn.microsoft.com/en-us/library/ms345434(v=SQL.90).aspx

Информация, возвращаемая sys.dm_db_missing_index_details, обновляется, когда запрос оптимизируется оптимизатором запросов, и не сохраняется. Отсутствующая информация индекса сохраняется только до перезапуска SQL Server. Администраторы базы данных должны периодически делать резервные копии отсутствующей информации индекса, если они хотят сохранить ее после перезапуска сервера.

Наконец, есть статья, в которой рассматриваются ограничения, о которых вы можете знать или не знать, но я опубликую эту статью на тот случай, если кто-то еще натолкнется на этот пост и ему понадобится: http://msdn.microsoft.com/en-us/library/ms345485(v=SQL.90).aspx

Я ничего не видел о том, что эта функция отсутствует в некоторых версиях, но вам понадобятся определенные разрешения:

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

Другой вариант - запросить кеш плана напрямую - это также дает преимущество в том, что он может получить запрос, который требует индекса. Здесь есть вопрос, связанный с SO - в ответе BankZ есть полный SQL-скрипт, который делает эту работу.

Хотя это может выполняться медленно - планы представлены в формате XML, поэтому в этом запросе мы просим SQL Server выполнять большую часть работы с XML, а не работу с таблицами. Но это работает:-)

Как и в случае с основной отсутствующей индексной таблицей, кэш плана очищается при перезапуске SQL Server.

Другие вопросы по тегам