SQL Server 2008: разумный сценарий стресс-тестов - PullRequest
1 голос
/ 31 марта 2011

Я выполняю стресс-тестирование на SQL Server 2008 с JMeter.

Я хочу улучшить хранимую процедуру, которая должна обслуживать 20 запросов в секунду.

Процедура принимает параметр xml и возвращает результат xml.

Стоит ли использовать только одно значение параметра или тестировать несколько сценариев?

Мои основные сомнения:

  1. перекомпиляция плана выполнения процедуры (это может замедлитьпроцедура)
  2. извлечение данных с диска (не все необходимые данные могут храниться в основной памяти)

1 Ответ

3 голосов
/ 31 марта 2011

Разработка реалистичного стресс-теста / нагрузочного теста в SQL Server - это искусство.

На производительность может влиять множество факторов:

  • Аппаратное обеспечение : вам нужно запускать тесты на том же оборудовании, на котором вы определили цель (20 вызовов в секунду). Это включает в себя конфигурацию диска, избыточность, кластеризацию, ... Это не всегда возможно, поэтому вам нужно сделать его как можно ближе, как бы разнообразнее ни была ваша тестовая среда, тем более нереалистичные результаты могут быть. Это означает, например, что если вы используете 2 ЦП вместо 4, вы не сможете соответствующим образом настроить параметры.

  • Загрузка данных : с точки зрения количества записей, которые необходимо протестировать, идеально иметь на 30% -40% больше максимальных строк, ожидаемых в таблицах.

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

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

  • Параллельная загрузка : сервер может выдавать вам 20 запросов в секунду, если это единственный вызов, который вы делаете в базу данных, но как только вы начинаете делать другие вызовы, все это разваливается на части. Нагрузка должна включать другие связанные части системы.

  • Операционная нагрузка : Совершенно бессмысленно совершать 20 вызовов в секунду, если запросы все одинаковые. Вам нужно использовать методы генерирования данных, чтобы запросы были реалистичными, а не чисто случайными.

Если вы используете C #, некоторое время назад я использовал этот инструмент, который может помочь вам в создании реалистичных случайных данных .

...