Как определить значение кэша по умолчанию в SQL Server Denali


kak-opredelit-znachenie-kjesha-po-umolchaniju-v_1.gif

В версии SQL Server 2012 (известной под условным названием Denali) для последовательностей по умолчанию используется значение кэша 50 (эта информация отсутствует в официальной документации, так как компания Microsoft хочет сохранить за собой право изменять ее). Но как определить текущее значение кэша? Можно создать последовательность с использованием параметра кэширования по умолчанию, запросить новое значение, вызвать немедленное неправильное завершение, запустить службу SQL Server, а затем запросить новое значение и посмотреть, каким будет результат.

Чтобы вызвать немедленное завершение, можно отключить компьютер от сети, но это не самый лучший метод. Более удачный способ — просто закрыть процесс SQL Server из диспетчера задач, а затем запустить его вновь с помощью значка «Службы» панели управления. Чтобы использовать этот подход, сначала создайте новую последовательность со значением кэша по умолчанию, запросите новое значение и направьте в систему запрос текущего значения.

Конечно, этот тест непригоден для IDENTITY, так как SQL Server восстанавливает потерянные значения через журнал транзакций. В этом случае достаточно знать жестко заданное значение, которое на момент подготовки статьи было равно 10.

Обратите внимание, что при корректном завершении работы SQL Server на диск записывается текущее значение плюс единица; когда после перезапуска поступает следующий запрос к значению последовательности, новое значение последовательности начинается с этой точки. Например, пусть размер кэша равен 50. Сохраненное значение в системных таблицах — 151 (первое некэшированное значение), текущее значение последовательности — 142, а число значений, оставшихся для использования, прежде чем следующий запрос приведет к записи на диск, 8. Поэтому, если на данном этапе завершение работы будет выполнено корректно, SQL Server запишет число 143 (следующее значение, которое будет использовано) в системные таблицы. После перезапуска системы и появления запроса следующего значения последовательности SQL Server выделит 50 значений, записав на диск число 193.

Комментарии