Тестирование запросов - PullRequest
       12

Тестирование запросов

4 голосов
/ 22 ноября 2011

Преамбула

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

Для первоначального тестирования моя единственная забота - скорость выполнения.Последующие итерации покроют стоимость процессора и памяти.

Для этого я построил небольшую таблицу (100M строк) и хочу зафиксировать разницу во времени.Я планирую делать все это в пакете служб SSIS, сравнивая временные характеристики OnPreExecute и OnPostExecute.

Первый поток данных примет форму SELECT * FROM TABLE, тогда как последний будет SELECT Aggregate(col1) FROM TABLE

SSIS Aggregate против Database Aggregate

Подобные вопросы, но не то, чтоЯ искал

tl; dr;

Чтобы сделать оценки как можно более четкими, я должен

  • очистить кэш между шагами
  • прогреть кэш с помощьюпредварительное выполнение запросов
  • что-то еще

Если решение сбрасывается, достаточно dbcc freeproccache или мне нужно dbcc dropcleanbuffers

1 Ответ

4 голосов
/ 22 ноября 2011

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

Если бы это был я, я бы запустил что-то вроде:

DBCC FREEPROCCACHE
CHECKPOINT
DBCC DROPCLEANBUFFERS

FREEPROCCACHE только очищает кэш плана и не имеет ничего общего со страницами данных.

CHECKPOINT сбросит все грязные страницы на диск.

DROPCLEANBUFFERS очистит буферный пул страниц данных.

Я бы также рассмотрел SET STATISTICS IO ON и SET_STATISTICS TIME ON для всего, что работает в SSMS.

...