Тестирование производительности в представлении SQL Server дало удивительные результаты. Почему?

Недавно мы внесли некоторые изменения в некоторые представления SQL Server, которые могли отрицательно повлиять на производительность. Мы решили провести несколько тестов производительности этих представлений, чтобы увидеть, как мы на них повлияли. Результаты были неожиданными.

На графике ниже показаны результаты проведенных нами тестов производительности. Вот что представляет собой график:

  • Синяя линия - это вид до внесения каких-либо изменений.
  • Красная линия показывает вид после внесения изменений.
  • The x-axis represents iterations in a loop.
    • Each iteration, a thousand new records are inserted (that the view will return).
    • На каждой итерации мы делаем несколько выборок из тестируемого представления и усредняем результаты.
  • Ось Y представляет время, необходимое представлению для возврата результатов.
  • Оператор select, который был протестирован на производительность, имел предложение where, чтобы каждый раз возвращать только 100 записей. (во время теста было вставлено 100 записей на каждое имя).

Результаты показывают, что производительность действительно снизилась, но нас сбивает с толку тот огромный рост производительности, когда мы достигаем около 40 000 записей в базе данных. Мы запускали этот тест на нескольких разных серверах и каждый раз получали похожие результаты.

Мне интересно, может ли кто-нибудь понять, почему это происходит. Почему мы получаем огромный прирост производительности, когда превышаем рекордный уровень в 40 000? Кто-нибудь видел что-нибудь подобное раньше? Я пытался найти причину для этого, но пришел с пустыми руками.

Мы пробовали настраивать представление, возиться с индексами, перестраивать и реорганизовывать индексы, анализировать план выполнения и многое другое, но пока мы не нашли ничего, что могло бы вызвать это.

Просмотр производительности

Любая помощь или понимание будут очень благодарны. Спасибо.


person Jacob Adams    schedule 03.05.2012    source источник
comment
А грубая структура таблицы, индексы и запрос просмотра есть? Лучшее предположение без информации, вы индексируете таблицу, когда вам не следует этого делать, и БД, наконец, справляется с этим и выполняет полное сканирование.   -  person Ben    schedule 04.05.2012
comment
Представление довольно сложное, то же самое касается индексов и структуры таблиц. Я ищу исключительно идеи о том, где искать, чтобы диагностировать эту проблему. Я подробнее рассмотрю упомянутое вами сканирование индекса и сканирование таблиц. Спасибо.   -  person Jacob Adams    schedule 04.05.2012
comment
Пожалуйста, опубликуйте снимок экрана с фактическими планами выполнения до и после. Запустите запрос с размером ввода, при котором вы удивитесь разнице в производительности. Вероятно, проблема заключается в неверной оценке количества элементов.   -  person usr    schedule 04.05.2012
comment
Публикация плана выполнения была бы гораздо полезнее.   -  person James Johnson    schedule 04.05.2012
comment
Из-за огромного размера плана запроса размещать его здесь нецелесообразно. Однако некоторые из ваших ответов помогли мне указать правильное направление. Как отметил @usr, я считаю, что это как-то связано с неверной оценкой мощности.   -  person Jacob Adams    schedule 07.05.2012


Ответы (2)


Вы должны подойти к этому так же, как и к любому другому исследованию эффективности: используйте надежную методологию и меры. Ожидания и очереди, опять же, будут бесценными в качестве методологии выявления узких мест. . После того, как вы определите и оцените соответствующие показатели, можно будет дать ответ, что происходит.

Прямо сейчас вы просто измерили время отклика, без каких-либо фактических данных о том, как оно затрачено. Без единой представленной фактической точки данных (собранные показатели, спецификации тестов для других и т. Д.) Можно было бы предпринять любое объяснение с равными шансами на правильность: код клиента, конфликт блокировки, рост файла, журнал рост, статистика индекса, изменение плана запроса, человеческая ошибка, гремлины, лунные лучи и, конечно же, мой любимый: фрагментация.

Так что либо проведите надлежащий анализ и расследование и соберите соответствующие показатели, либо опубликуйте точный тест (сценарии воспроизведения, методология), чтобы мы могли измерить себя.

person Remus Rusanu    schedule 03.05.2012

Вы пробовали обновлять статистику по задействованным таблицам.

Возможно, ваша статистика устарела, и план, который использовался, не соответствовал вашему количеству строк.

person Steve Stedman    schedule 04.05.2012
comment
+1 Я считаю, что SQL Server может автоматически обновлять статистику после изменения X% строк, поэтому каждые 1000 строк не обязательно обновят статистику, и они могут устареть. Также случайный удар: 40K записей - это когда параллельная стоимость меньше, чем предполагаемое снижение производительности при распараллеливании запроса. - person ta.speot.is; 04.05.2012