Профиль SQL и DTA
Вот сценарий:
Я провел трассировку в течение нескольких часов при максимальной загрузке сервера, используя три события (не говоря уже об этом), которые ищет DTA. Затем я останавливаюсь и подаю эту загрузку профилировщика в DTA. Он выполняет настройку и дает мне обратную связь о том, какие индексы нужно поставить.
Вот вопрос:
Несколько (до 15) различных рекомендаций по индексам для одной таблицы. Если я позволю DTA выполнять свою работу, значит ли это, что для этого будет создано несколько индексов? Не будет ли это проблемой?
4 ответа
Оптимизация сервера SQL является сложной и сильно зависит от данных в вашей базе данных. Единственный реальный способ определить, какие изменения коснутся изменений, - это выполнить тестирование производительности и нагрузку на вашу базу данных, используя репрезентативные данные (предпочтительно резервную копию вашей активной базы данных)
Тем не менее, мне кажется, что 15 индексов очень много - большое количество индексов может оказать негативное влияние на скорость записи в эту таблицу. DTA, вероятно, выполнял каждый запрос к этой таблице индивидуально и подбирал оптимальные индексы для каждого запроса. Вы, вероятно, обнаружите, что можно восстановить количество индексов путем создания индексов, подходящих для нескольких запросов - это может означать, что некоторые запросы немного медленнее, чем со всеми 15 индексами, однако есть вероятность, что вы сможете получить 99% улучшение.
DTA делает разумное во многих обстоятельствах, но не всегда дает оптимальные рекомендации. Перекрытия довольно распространены, так же как и дублирование кластеризованного индекса в виде некластеризованного индекса (!).
Если вы хотите сделать это более точно вручную: MS SQL Server 2008 - Как я могу войти и найти самые дорогие запросы?
Не зная больше о таблицах, запросах или индексах, ответ должен быть "это зависит"...
Вам нужно взять вывод из DTA в качестве отправной точки. Если вы посмотрите на рекомендуемые индексы, вы можете обнаружить, что между ними есть некоторое перекрытие, чтобы уменьшить количество индексов.
15 индексов кажутся много для одной таблицы. Я бы посмотрел на сами запросы, которые выполняются против него.
Ищите места, где изменения в структуре запроса будут работать для всех существующих индексов или небольшого подмножества предлагаемых индексов.