Привет всем.
Сегодня столкнулся со странной особенностью параметра target_recovery_time_in_seconds - он весьма сильно может влиять на производительность.
Вводные данные.
SQL Server 2016
1. База от ax4 созданная изначально в SQL 2008 и перенесеная через бекап.
2. База от ax2012 созданная из базы ax4 через конвертацию данных.
Есть запрос. Простой джоин двух табличек по 2 млн записей каждая по кластерному ключу (ItemId) с заполнением строкового поля по 10-15 символов. (Идет перекачка значения из одной таблички в другую)
Запрос по базе ax2012 работет 75 секунд.
Запрос по базе ax4 работает 40 секунд.
Структура табличек одинакова.
Почему такая разница?
Выяснилось что в базе 2012 которая создавалось с нуля инсталлятором параметр target_recovery_time_in_seconds имеет дефолтное для SQL 2016 значение - 60 секунд. А для базы 4-ки поднятой через бекап, значение 0, поэтому такая разница.
Если обнулить этот параметр в базе 12-ки, то этот запрос ускоряется в 2 раза.
Вопрос, как правильнее настраивать target_recovery_time_in_seconds для аксапты ?
Для SQL2016 у него дефолтное значение 60 (даже для tempDB). Для более ранних версий - 0
Кто-нибудь тюнинговал этот параметр ?
P.S.
Интересная ссылка в тему:
https://www.mssqltips.com/sqlservert...ver-io-spikes/