Як звільнити пам'ять SQL Server?


9

У мене на локальному комп’ютері встановлена ​​пісочниця SQL Server. Я встановив, що примірник SQL Server може використовувати 1000 Мбіт. Під час інтенсивної роботи споживання пам’яті зростає до 1000 мб. Коли операція закінчена, SQL Server все ще зберігає пам'ять. Як звільнити це бронювання пам'яті?


2
Які ваші min server memoryта max server memory налаштування ? Після того, як SQL Server зарезервує вказаний вами мінімум, він ніколи не випустить його, якщо ви не зміните налаштування або відмовтеся від екземпляра. Як зауважив Джеймс, якщо він резервує більше мінімального, який ви вказали, він теоретично повинен звільнити його, коли він цього не потребує, і на машині існує тиск пам'яті.
Nick Chammas

@ Nick: хв. Пам'яті сервера: 0 (МБ); Максимальна пам'ять сервера: 600 (МБ).
jrara

Відповіді:


13

Стоп / запуск послуги, більше нічого не поверне пам'ять в ОС.

Очевидно, це не те, що ви хотіли б зробити з операційним сервером, але цілком розумно для місцевої пісочниці. З трьома різними примірниками на моєму ноутбуці - це єдиний життєздатний спосіб.

Редагувати коментарі @ Nick

Як зауважив Джеймс, якщо він резервує більше мінімального, який ви вказали, він теоретично повинен звільнити його, коли він цього не потребує, і на машині існує тиск пам'яті.

Яке ваше визначення "не потрібно"? Як тільки буферний пул заповнений, він не збирається викидати сторінки, поки вони не стануть спокійними за інших сторінок, що надсилаються. Якщо вам потрібно негайно повернути пам'ять, як це стосується @jrara, вам доведеться зупинити / початок.


2
Для Microsoft : "У Windows Server 2003 SQL Server використовує API сповіщення про пам'ять, QueryMemoryResourceNotificationщоб визначити, коли пул буфера може виділяти пам'ять та звільняти пам'ять." Тож якщо ви просто переживаєте, як голодувати інші додатки, яким може знадобитися більше пам’яті, теоретично SQL Server звільнить необхідну йому пам’ять, коли Windows про це каже. Єдина причина, з якої вам потрібно буде примусити випуск, перезавантаживши примірник, - це те, що цей механізм не працює як розроблено або ваші налаштування пам'яті min / max неправильні.
Нік Шаммас

Ще одна корисна стаття msdn для уточнення цього msdn.microsoft.com/en-us/library/ms178145.aspx . Поки SQL Server досягне мінімальної настройки пам'яті сервера, він звільнить пам'ять у відповідь на сповіщення про мало пам'яті з ОС. На мій досвід, це має бути досить екстремальним, щоб це відбулося.
georgeb

Точно @georgeb_dba, він не охоче відмовиться від цього. Ergo, зупини / запусти і негайно повертай у своїх ноутбуків обмежену пам’ять.
Марк Сторі-Сміт

4
DBCC FREESYSTEMCACHE ('ALL') 
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE 

звільнить басейн.

https://msdn.microsoft.com/en-us/library/ms178529.aspx

Зауваження

Виконання DBCC FREESYSTEMCACHE очищає кеш плану для екземпляра SQL Server. Очищення кешу плану викликає перекомпіляцію всіх наступних планів виконання і може спричинити раптове, тимчасове зниження продуктивності запитів. Для кожного очищеного кеш-пам'яті в кеші плану, журнал помилок SQL-сервера буде містити таке інформаційне повідомлення: "SQL Server зіткнувся з% d появою (-ми) залишків кеш-пам'яті для кеш-пам'яті '% s' (частина кешу плану) через "DBCC FREEPROCCACHE" або "DBCC FREESYSTEMCACHE". " Це повідомлення реєструється кожні п’ять хвилин до тих пір, поки кеш буде промитий протягом цього інтервалу часу.


1
майже впевнений, що це фактично не зменшить обсяг пам’яті, який SQL зарезервував на рівні ОС
Грег

3

Він видасть пам'ять, яку він не використовує автоматично, оскільки інші додатки намагаються зробити це.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.