Недавно мы внесли некоторые изменения в некоторые представления 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? Кто-нибудь видел что-нибудь подобное раньше? Я пытался найти причину для этого, но пришел с пустыми руками.
Мы пробовали настраивать представление, возиться с индексами, перестраивать и реорганизовывать индексы, анализировать план выполнения и многое другое, но пока мы не нашли ничего, что могло бы вызвать это.
Любая помощь или понимание будут очень благодарны. Спасибо.