Время от времени выполнения запросов в SQL Server 2008 - PullRequest
2 голосов
/ 07 июля 2011

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

MERGE INTO [dbo].[tbl1] AS tbl
USING (SELECT col2,col3, max(col4) col4, max(col5) col5, max(col6) col6 FROM #tmp group by col2, col3) AS src
ON (tbl.col2 = src.col2 AND tbl.col3 = src.col3)
WHEN NOT MATCHED THEN 
INSERT (col2,col3,col4,col5,col6)
VALUES (src.col2,src.col3,src.col4,src.col5,src.col6);

Время выполнения вышеуказанного запроса является случайным;в диапазоне от 0:02 до 2:00 минут.

Я запускаю эти тесты в SQL Server Studio с помощью сценария, который создает 10000 строк данных (в таблицу #tmp), а затем запускается приведенный выше запрос MERGE.Дело в том, что для каждого теста, который я запускаю, выполняется один и тот же сценарий.

Время выполнения отскакивает от секунд до минут, как в:

  • Тест № 1: 0:10 секунд
  • Тест № 2: 1:13 минут
  • Тест № 3: 0:02 секунд
  • Тест № 4: 1:56 минут
  • Тест № 5: 0:05 секунд
  • Тест № 6: 1:22 минуты

Одна метрика, которую я нахожу интересной, состоит в том, что чередующаяся последовательность секунд / минут является относительно последовательной, то есть при любом другом тесте результаты представлены в секундах.дайте мне какие-нибудь подсказки относительно того, что может быть причиной того, что этот запрос имеет такие спорадические времена выполнения?

1 Ответ

1 голос
/ 08 июля 2011

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

Я создал новую базу данных и целевую таблицу и добавил 25 миллионов записей в целевую таблицу. Затем я запустил свои первоначальные тесты для новой базы данных / таблицы, многократно вставляя 10 тыс. Записей в целевую таблицу. Результатами были согласованные времена выполнения приблизительно 0:07 секунд (для каждой вставки 10 КБ).

Для ударов я провел точно такое же тестирование на машине с процессором / памятью в два раза больше, чем на моем ноутбуке для разработчиков. Результатом было согласованное время выполнения 0:00 секунд (пришло время для новой машины разработчика;))

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...