На самом деле, есть аккуратный маленький трюк, чтобы получить то, что вы ищете. Проблема/вопрос заключается в том, как заставить SQL Server «временно» отказаться от памяти, которая может не понадобиться агрессивно, а затем позволить ей пересмотреть ее по мере необходимости.
Для этого запустите следующий сценарий:
EXEC sys.sp_configure N'show advanced options', N'1'
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N'max server memory (MB)', N'{low water mark}'
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N'max server memory (MB)', N'{High water mark}'
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N'show advanced options', N'0'
RECONFIGURE WITH OVERRIDE
GO
Put в ваших собственных значениях {низкий водяной знак} и {половодья знака} (в мегабайтах).
Это приведет к уменьшению объема памяти до минимальной суммы, а затем снова откроет ее, если SQL Server нуждается в ней.
Единственное, что нужно сделать, это запланировать запуск сценария на периодической основе.
Рекомендация:
Где SQL Server не используется активно, попробуйте запустить это каждые 6 часов автоматически. Если он сильно используется, запускайте его каждые 24 часа (скажем, в середине ночи или непосредственно перед началом дня). Ваше использование будет отличаться.
Как вы измеряете эти цифры? Имейте в виду, что диспетчер задач может давать цифры, вводящие в заблуждение (я всегда выбираю perfmon и смотрю на частные/виртуальные байты) –
Я контролирую SQL-сервер, используя диспетчер задач и отдельное приложение dotnet, которое использует класс PerformanceCounter –