Время выполнения фрагмента кода


vremja-vypolnenija-fragmenta-koda_1.jpg

Из этих тестов можно сделать вывод, что производительность объекта последовательности с кэшированием по умолчанию немного лучше производительности IDENTITY; однако без кэширования объект последовательности работает намного медленнее.

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

Поэтому я направил запрос к вспомогательной функции GetNums для создания 10000000 строк — в 10 раз больше, чем в предыдущем тесте, и применил выражение NEXT VALUE FOR к Seql, чтобы создать значения последовательности. В диалоговом окне Query Options («Параметры запроса») был включен режим Discard results after execution («Отбросить результаты после выполнения»), чтобы запрос времени выполнения не включал формирования выходных данных в среде SQL Server Management Studio (SSMS).

Я запускал этот фрагмент кода несколько раз, меняя определение последовательности с различными значениями кэша, которые требовалось протестировать. Я протестировал NO CACHE, 10, 20, 30, 40, 50 (по умолчанию) и 10000000. Результаты тестов показаны на рисунке.

Обратите внимание, что ось Y, представляющая время выполнения, начинается с 11 (время выполнения запроса без создания значений последовательности), чтобы более наглядно отразить чистое различие в производительности между различными значениями кэша. Любопытно, что существует очень большое различие между отсутствием кэширования и кэшированием, даже для малых значений, но по мере увеличения значений кэша улучшение происходит нелинейно. Поэтому, если вы опасаетесь потери большого числа значений последовательности при непредвиденном отключении, использование довольно малых значений кэша не приведет к серьезным потерям производительности. Кроме того, чтобы определить примерное местоположение IDENTITY на этой диаграмме, обратите внимание на столбик со значением кэша 10.

Комментарии