Я знаю, что SQL любит RAM, но выпускает его, когда Windows спрашивает. Я знаю, что так SQL должен работать. Но у меня есть администратор Windows, который не уверен, что SQL на самом деле вернет ОЗУ, и на этом (виртуальном) сервере SQL не понадобится много, как только службы Analysis Services будут завершены, но на этом сервере больше ничего не мешает. спросите SQL за многое.
Поэтому я пытаюсь заверить администраторов Windows, что проблемы с виртуальной средой не «потому что SQL использует слишком много ОЗУ», но я не могу убедить SQL выпустить его без перезапуска службы.
При обработке кубов служба SQL с радостью отнимает 8 ГБ ОЗУ, но, поскольку на нее нет давления, большая часть этого не высвобождается в течение обычного дня. Ребята из Windows кричат, и было бы намного лучше, если бы SQL выпустил это.
Я не хочу использовать параметр max memory, потому что на самом деле я хочу, чтобы SQL использовал столько памяти при обработке. Я просто хочу, чтобы потом снова вернуться вниз.
Это потенциально дубликат SQL Server, который не освобождает память и освобождает память от SQL Server , но мне интересно, есть ли другой ответ. Ожидание, когда Windows исправит это, не убедит парней Windows здесь. Перезапуск сервиса - вариант, но я действительно не фанат этой идеи.
Я хочу знать, как заставить Windows просить это назад ...
источник
sp_configure
это обычно то, что вы должны установить один раз и оставить в покое.Ответы:
Я считаю, что ваш единственный вариант - перезапустить службу SQL или запустить приложение, которое потребляет много памяти, чтобы заставить SQL выпустить его.
Мне нравится предложение @Nick Kavadias: следить за счетчиком производительности Memory: Page Faults / Sec, чтобы показать, что SQL не подвергает память операционной системы давлению.
источник
Один из способов показать им, что это будет сделано, - заставить SQL Server проверять всю память. Затем скопируйте огромный файл по сети (для этого отлично подойдут большие файлы SQL Backup). Это приведет к заполнению системного кэша, и Windows начнет запрашивать у SQL память. SQL начнет возвращать память обратно в ОС, пока не достигнет минимального значения памяти.
(Извините, я не получил весь вопрос через Twitter, очевидно, понадобилось более 140 символов.)
источник
Вы упоминаете «кубы», поэтому неясно, говорите ли вы о движке AS или реляционном движке. Реляционный движок может освободить память по требованию:
Где 'имя кеша' берется из sys.dm_os_memory_clerks . В спецификации DBCC FREESYSTEMCACHE упоминаются только пулы управляющих, но на самом деле гораздо больше кэшей можно удалить.
Но если вся память используется буферным пулом, то исключение всего буферного пула приведет к огромному снижению производительности и огромной нагрузке ввода-вывода. Лучше пусть SQL справится с этим сам.
источник
Как с двигателями AS, так и с двигателями DS вы можете ограничить память, чтобы они оставались ниже безопасного порога; это рекомендуется на 64-битных машинах с большим количеством оперативной памяти и / или несколькими экземплярами SQL. По крайней мере, для ядра базы данных, если вы измените ограничение памяти ниже текущего использования, это уменьшит объем памяти на лету без перезапуска службы, хотя и не уверен насчет SSAS.
источник
Самое простое, что я нашел, это перейти к свойствам памяти сервера, ввести меньшее значение, применить, подождать несколько минут и настроить резервную копию конфигурации.
Мы также обнаружили, что регулирование использования памяти серверами sql может фактически повысить производительность сервера, поскольку это дает Windows больше памяти для кэширования и т. Д.
источник