2010-01-05 2 views
0

Вот сценарий:SQL Profile и ДТ

Я запустить трассировку на несколько часов во время максимальной нагрузки на сервере, используя три события (не против этого), что DTA ищет. Затем я останавливаюсь и загружаю эту нагрузку профилировщика в DTA. Он выполняет свою настройку и дает мне обратную связь о том, какие индексы необходимо поместить.

Вот вопрос:

Несколько (до 15) различных рекомендаций индексов для одной таблицы. Если я позволю DTA выполнить свою работу, это означает, что для этого будут созданы несколько индексов? Это не проблема?

ответ

0

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

Тем не менее, 15 индексов мне очень нравятся - большое количество индексов может иметь детальное влияние на скорость записи на эту таблицу. DTA, вероятно, каждый раз выполнял каждый запрос с этой таблицей и придумывал оптимальные индексы для каждого запроса. Вероятно, вы обнаружите, что можно указать количество индексов, создав индексы, подходящие для нескольких запросов - это может означать, что некоторые запросы слегка медленнее, чем при всех 15 индексах, однако есть вероятность, что вы сможете получить 99 % от улучшения.

+0

Он показывает улучшение на 96,5%, но я думаю, что согласен с тобой, что некоторые запросы медленнее из-за новых индексов. Это в основном отборные заявления. Сервер занимает много запросов, а запросы похожи (не одинаковы и не могут быть кэшированы). Репрезентативные данные достаточно репрезентативны. Я буду запускать это несколько раз, прежде чем идти с DTA. Я также проверю на долгое время, часто работает, тупики и так далее. Я просто не тороплюсь. Но спасибо за информацию. – Tesnep

+0

Еще одно замечание: если вы применяете индексы (в точности, как предлагалось DTA), а затем повторно запускайте DTA, у вас могут быть дополнительные индексы, предлагаемые DTA. Моим советом было бы рассмотреть каждый индекс индивидуально, пока вы не придумаете индексы, которые имеют значительное улучшение производительности (если индекс просто занимает 20 мс с 2-секундного времени исполнения, то действительно ли это стоит?) – Justin

0

Не зная больше о таблицах, запросах или индексах, ответ должен быть «это зависит» ...

Вы должны взять на себя выход из ДТА в качестве отправной точки. Если вы посмотрите на рекомендуемые индексы, вы можете обнаружить, что между ними существует некоторое совпадение, чтобы уменьшить количество индексов.

+0

Так что это означает, что мне нужно заглядывать в него один за другим? – Tesnep

1

DTA делает разумным во многих обстоятельствах, но не всегда дает оптимальные рекомендации. Перекрытия довольно распространены, равно как и дублирование кластерного индекса как некластеризованного индекса (!).

Если вы хотите, чтобы сделать это более точно вручную: MS SQL Server 2008 - How Can I Log and Find the Most Expensive Queries?

+0

Как мне это сделать? И есть не только эта таблица. Существует несколько таблиц, для которых приведены несколько рекомендаций. Я не думаю, что у меня есть время, чтобы заглянуть в них один за другим. – Tesnep

+1

Я думал о том, чтобы сделать маршрут, подобный этому, чем доверять DTA, чтобы сделать это, увидев результаты. Спасибо за ссылку. – Tesnep

0

15 индексов, похоже, много для одной таблицы. Я бы посмотрел на фактические запросы, которые запускаются против него.

Ищите места, где изменения в структуре запроса будут работать с обоими существующими индексами или небольшим подмножеством предлагаемых индексов.

Смежные вопросы