Вопрос: Как заставить SQL Server выпускать свою память?


Я знаю, что SQL любит RAM, но выпускает ее, когда Windows спрашивает. Я знаю, что именно так должен работать SQL. Но у меня есть администратор Windows, который не убежден в том, что SQL действительно вернет оперативную память, и на этом конкретном (виртуальном) сервере SQL не потребуется много раз, как только службы Analysis Services будут завершены, но на этом сервере нет ничего, что мешает спросите SQL много.

Поэтому я пытаюсь убедить администраторов Windows, что проблемы с виртуальной средой не «потому что SQL использует слишком много ОЗУ», но я не могу убедить SQL освободить его, не перезагружая службу.

При обработке кубов служба SQL с удовольствием занимает 8 ГБ оперативной памяти, но поскольку на это нет никакого давления, она не выделяет большую часть этого в течение обычного дня. Ребята из Windows кричат, и было бы гораздо лучше иметь SQL-версию.

Я не хочу использовать максимальную настройку памяти, потому что я действительно хочу, чтобы SQL использовала столько ОЗУ при обработке. Я просто хочу, чтобы он снова спустился вниз.

Это потенциально дубликат обоих SQL Server не освобождает память а также Восстановление памяти из SQL Server, но мне интересно, есть ли другой ответ. В ожидании восстановления Windows это не поможет убедить ребята из Windows здесь. Перезапуск службы - это вариант, но я действительно не поклонник этой идеи.

Я хочу знать, как заставить Windows просить об этом обратно ...


18
2018-02-01 05:29


Источник


Что ... системный администратор жалуется на использование ОЗУ? Я получаю дерьмо, когда RAM НЕ используется, потому что, если он не используется, он просто будет расточительным ... - Mark Henderson♦
Я тоже этого не понимаю, если машине не нужна память - в чем проблема? Вот как обычно работает операционная система и ее приложения ... учитывая, что рабочая нагрузка с незанятой службой SQL сохраняет большую часть памяти, когда больше ничего не требуется, это может увеличить время отклика и / или производительность для следующей работы SQL в любом случае? - Oskar Duveborn
Администратор Windows считает, что SQL подчеркивает работу машины, потому что процесс имеет столько оперативной памяти. Я знаю, что ящик не испытывает стресса от SQL и может продемонстрировать его, перезапустив службу SQL, показывая, что она потребляет много RAM при получении данных для обработки SSAS. Поэтому я хочу, чтобы SQL освобождал память, чтобы показать объем ОЗУ, который SQL использует в остальной части дня. Речь идет не о том, чтобы заставить их предоставить больше оперативной памяти, а просто заставить их перестать обвинять SQL в этом. - Rob Farley
Согласитесь с Farseeker, sysadmin должен быть счастлив, что RAM используется. Если он не будет восстановлен, сервер не нуждается в нем. Может быть, попросите системного администратора посмотреть на ошибки страницы, чтобы показать, что система не подчеркнута? - Nick Kavadias
Если ваш системный администратор не понимает, что представляют собой Page Faults, и почему память потребляется, но никаких реальных сбоев в странице не является проблемой, я не знаю, как вам помочь. Вы не можете исправить глупость. Однако одна вещь, которую вы можете сделать, - это использовать sp_configure для настройки максимальной памяти вниз, когда вы не используете систему, и настройте ее резервную копию, когда вам это нужно. Однако это кажется довольно глупым. sp_configure как правило, вы должны установить один раз и оставить в покое. - Bacon Bits


Ответы:


Я считаю, что ваш единственный вариант - перезапустить службу SQL или запустить приложение, которое потребляет много памяти, чтобы заставить SQL освободить его.

Мне нравится предложение @Nick Kavadias: следить за Память: ошибка страницы / сек. чтобы показать, что SQL не помещает память ОС под печатью.


12
2018-02-01 05:31



Спасибо Mitch ... Позвольте мне найти текстовый файл 10GB для Notepad. - Rob Farley
lol !, на самом деле это неплохая идея! - Mitch Wheat
возможно, используйте файл размером 2 ГБ ... - Mitch Wheat


Один из способов показать им, что он будет делать это, - это заставить SQL Server пережевывать всю память. Затем скопируйте огромный файл по сети (большие файлы SQL Backup отлично подходят для этого). Это приведет к заполнению системного кеша, и Windows начнет запрашивать SQL для своей памяти. SQL начнет возвращать память обратно в ОС до тех пор, пока не достигнет настройки вашей минимальной памяти.

(Извините, не получил весь вопрос через Твиттер, возможно, понадобилось более 140 символов).


5
2018-02-01 07:48



Я надеюсь на какой-то процесс, который я могу использовать, который попросит SQL для памяти обратно (после очистки и удаления буферов), но без необходимости калечить окно, чтобы сделать это. - Rob Farley
Я не думаю, что есть способ заставить диспетчера памяти Windows запросить обратно память, не заставляя проблему с помощью других средств. Вероятно, вы могли бы написать что-то, что попадает в API win32, чтобы это сделать, но насколько я знаю, единственный способ вызвать Windows для запроса обратно обратно - заставить его больше памяти для другого процесса. Обратитесь к Бобу или Полю, у них может быть больше информации. - mrdenny
Драйвер виртуального шасси VMware делает именно это - он просит Windows все больше и больше памяти, чтобы заставить SQL Server (или любое другое приложение) отказаться от своей памяти. - Brent Ozar
Да, я надеялся, что мне не придется делать что-то подобное. - Rob Farley
@BrentOzar, драйвер Ballware VMware восстанавливает память только из системы кэш, а не фактическая память процесса; он разработан как способ рассказать O.S. «не используйте всю доступную память для мелочи», а не для ее снижения. - Massimo


Вы упоминаете «кубы», поэтому неясно, говорите ли вы об AS-двигателе или реляционном движке. Реляционный движок может освобождать память по требованию:

DBCC FREESYSTEMCACHE('<cache name>');

Где «имя кеша» взято из sys.dm_os_memory_clerks, Спецификация DBCC FREESYSTEMCACHE только упоминает пулы губернаторов, но многие другие тайники могут быть фактически выселены.

Но если вся память используется пулом буферов, то вытеснение всего пула буферов приведет к огромной деградации производительности и огромной нагрузке ввода-вывода. Лучше пусть SQL обрабатывает это сам.


2
2018-02-01 08:22



Привет Ремус, кеш реляционного буфера большой после обработки куба. После этого я действительно хочу, чтобы кэши были очищены, сброшены и память вернулась в Windows. DBCC DROPCLEANBUFFERS и FREESYSTEMCACHE освобождают кеш, но не возвращают память в Windows, так что это не совсем то, что я хочу. - Rob Farley
В теории вы могли бы подделать давление памяти (например, вы могли бы использовать trampoline QueryMemoryResourceNotification msdn.microsoft.com/en-us/library/aa366799%28VS.85%29.aspx), но я действительно действительно не пойду туда. Если SQL не освобождает выделенную память, это потому, что ОС не нуждается в ней. ОС не нуждается в памяти, поскольку SQL является единственным приложением на хосте (stackoverflow.com/questions/1401834/...), правильно? Если вы запустили какое-то другое приложение по SQL, у вас это получилось. - Remus Rusanu


Как с AS, так и с DS-системами вы можете поместить колпачок в память, чтобы они оставались ниже безопасного порога; это рекомендуется для 64-битных машин с большим количеством ОЗУ и / или нескольких экземпляров SQL. По крайней мере для механизма базы данных, если вы измените колпачок памяти ниже того, что текущее использование уменьшит объем памяти на лету без необходимости перезапуска службы, но не уверен в SSAS.


2
2018-02-02 17:53



Имея колпачок в порядке, но я думаю, что мне захочется вытащить максимальную память после обработки, а затем вытолкнуть ее обратно, когда я предпочел бы очистить буферы, бросить их и попросить Windows некоторое давление на память. - Rob Farley


Самое легкое, что я нашел, это перейти к свойствам памяти сервера, ввести меньшее значение, применить, подождать несколько минут и настроить резервную копию конфигурации.

Мы также обнаружили, что использование памяти с использованием дросселирования sql-серверов может фактически повысить производительность сервера, поскольку он дает окна больше бара для кеширования и т. Д.


0
2018-02-08 18:44