sys.dm_db_missing_index_details не возвращает строк - PullRequest
3 голосов
/ 29 марта 2011

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

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

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

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

Заранее благодарим за любые попытки помочь.

Ответы [ 2 ]

6 голосов
/ 07 апреля 2011

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

1 голос
/ 13 апреля 2011

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

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

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

...