Як контролювати надмірне використання оперативної пам’яті SQL Server?


13

На сервері баз даних, який я використовую, працює 6 різних екземплярів SQL Server. Він має 48 Гб оперативної пам’яті. І один з них споживає більше 10 ГБ оперативної пам’яті, загальний споживання наразі становить 20 ГБ. Споживання оперативної пам'яті постійно зростає. За пару днів до цього він використовував більше 40 ГБ оперативної пам’яті, і сервер відповідав дуже повільно. Додаток показує проблеми з збоєм під час збереження даних.

Тому я перезапустив служби SQL Server.

Як тільки послуги перезапустили, використання зменшилось до 4 ГБ, але зараз воно зростає. І я переживаю, що він виросте до 40 ГБ за 4 або 5 днів і зробить сервер повільним.

Перезапуск сервісу - це не найкращий варіант.

Я також виявив з різних джерел, що ми можемо встановити максимальний розмір використання пам'яті для SQL Server. І я не зовсім впевнений, допоможе це чи ні. Я не можу перевірити це, оскільки сервер використовує виробничу базу даних, і це буде ризиком, якщо служба припиняється, змінюючи налаштування в SQL Server.

Чи може хтось допомогти з цією проблемою?


1
За замовчуванням SQL використовуватиме стільки оперативної пам’яті, скільки можливо, щоб досягти максимальної продуктивності, це добре - це означає, що це кешування загальних запитів і результатів, щоб пришвидшити вашу програму. Він використовуватиме оперативну пам’ять лише до тієї межі, на якій може траплятися підказка про звіти ОС. Ви можете змінити таку поведінку. Дивіться цю документацію щодо MS: Як налаштувати використання пам'яті за допомогою параметрів конфігурації на SQL Server. Це також може бути корисним: Як визначити правильні настройки конфігурації SQL Server

4
Це НЕ проблема - це розроблена та типова поведінка для SQL Server !! І так - перезапуск процесу SQL Server - жахлива ідея ..... SQL Server зберігає в пам'яті стільки даних, скільки покажчиків, - це оптимізує загальну продуктивність системи таким чином. Ось чому машина SQL Server завжди повинна бути виділеним сервером - нічого іншого, крім SQL Server.
marc_s

Так, я зрозумів. Він створений таким чином. Але коли sql-сервер використовує значну частину пам'яті, він робить сервер повільним і спричиняє час очікування звітів. Тож я хочу завадити серверу sql використовувати обмежену пам’ять.

4
Насправді, якщо SQL Server використовує якомога більше пам’яті, я б сказав, що це зробить менше шансів мати проблеми з доставкою звітів. Саме тоді, коли ви штучно обмежуєте SQL Server (або поміщаєте занадто багато екземплярів в одне поле, яке змагається за ресурси), ви побачите проблеми через надання пам'яті та інші проблеми.
Аарон Бертран

Але мені цікаво, чому він раптом почав добре показувати звіти після перезавантаження сервера sql. Чи може бути так, що занадто багато клієнтів використовували додаток, через який звіти не відображалися?

Відповіді:


14

Це за дизайном. SQL Server повинен використовувати всю наявну пам'ять, оскільки він зберігає все більше даних у пам'яті, щоб не потрібно повертатися на диск, щоб знову і знову отримувати однакову пам'ять.

Якщо вам потрібно обмежити об'єм пам'яті, який використовує один екземпляр SQL Server, ви можете зробити це в студії управління SQL Server, клацнувши правою кнопкою миші на ім'я екземпляра в Провіднику об'єктів і вибравши властивості. Потім виберіть вкладку пам'яті та встановіть максимальний об'єм пам'яті, яким SQL Server буде дозволений. Тепер це не буде обмежувати всі аспекти SQL Server цим обсягом пам'яті. Це лише керує пулом буфера та кешем плану виконання. Такі параметри, як CLR, Повний текст, фактична пам'ять, яка використовується файлами EXE SQL Server, SQL Agent, розширені збережені процедури тощо, не контролюються цим налаштуванням. Однак цим речам зазвичай не потрібна стільки пам’яті, саме пул буфера та кеш плану виконання, який потребує основної маси пам’яті.

Якщо ви встановите цей параметр на одному екземплярі, ви хочете встановити його на всіх примірниках, щоб вони не наступали один на одного.

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