Рейтинг:2

Освободить память в Windows Server 2019 для экземпляра SQL Server?

флаг kr

У нас Windows Server 2019 Standard (x64) с 64 ГБ памяти.

На приведенном ниже снимке экрана показано использование памяти на уровне 96% с SQL-сервер Windows NT работает и использует 344,5 МБ.

введите описание изображения здесь

Это Диспетчер задач после остановки службы SQL-сервер Windows NT. Использование памяти снизилось до 8%.

введите описание изображения здесь

я начинаю службу SQL-сервер Windows NT еще раз.Диспетчер задач очень низкий - 9%, но сервер Sql сейчас использует больше памяти, чем когда использование памяти составляло 96%. введите описание изображения здесь

Два вопроса:

  1. Что за проблема с памятью?
  2. Как я могу снизить использование памяти без перезапуска экземпляра сервера sql?
флаг cn
«мне кажется, что сервер sql использует мало памяти, потому что все остальное потребляет Windows». 100% это не Windows.
Рейтинг:8
флаг ng

Здесь вы упускаете важную деталь: диспетчер задач показывает, что SQL Server использует только 344,5 МБ ОЗУ, но на самом деле он зарезервировал гораздо больше, почти всю, для собственного использования. Диспетчер задач этого не покажет. Цифры в диспетчере задач на самом деле не составляют 97% системной памяти, потому что там не отображается зарезервированная память.

Ваше предположение о том, что почти вся ваша память занята чем-то другим, и поэтому SQL Server не может использовать более 344,5 МБ, просто неверно. Это не работает так. Диспетчер задач может вводить в заблуждение, взгляните на фактические счетчики производительности.


Обновите, чтобы попытаться объяснить это лучше.

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

Это ни в коем случае проблема; это сделано намеренно и по замыслу. «Проблема», которую вы видите, не существует, только то, что вы видите в диспетчере задач, вводит в заблуждение.

Если вы остановите SQL Server, он, конечно же, освободит всю выделенную ему память, как ту, которая отображается в диспетчере задач, так и ту (намного больше), которая не отображается. Когда вы запустите его снова, он будет использовать очень мало памяти: использование снова будет расти со временем, поскольку SQL Server загружает данные в память и кэширует их. Но большая часть этой памяти, опять же, будет нет отображаться в диспетчере задач, потому что этот конкретный инструмент не может его увидеть.

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

rbhat avatar
флаг kr
Я обновил вопрос скриншотами диспетчера задач после остановки службы сервера sql и ее повторного запуска. Почему сейчас память составляет 9%, а сервер sql использует больше памяти, чем 96%?
Massimo avatar
флаг ng
Как я уже сказал, SQL Server *резервирует память при запуске*. Эта зарезервированная память не отображается в диспетчере задач, но используется SQL Server. Если вы перезапустите его, вся зарезервированная память будет освобождена, а использование памяти снизится; со временем он снова будет расти, и диспетчер задач *не* будет его показывать.
Massimo avatar
флаг ng
То, что вы сделали, на самом деле демонстрирует, что процесс, использующий всю вашу память, был *точно* SQL Server, иначе его перезапуск не повлиял бы на использование памяти.
флаг in
Как лучше всего, сколько памяти следует оставить для ОС?
Рейтинг:8
флаг cn

Вы используете SQL Server на этой машине, поэтому он делает то же, что и SQL Server — он резервирует (почти) всю память, доступную в ОС, так что, когда он получает большие запросы или другие операции, ему не нужно выделять ОЗУ. , он уже есть.

У вас есть несколько вариантов.

  1. Принять это. Если вы используете только SQL Server на этом компьютере, то он работает так, как задумано. Оставить это в покое.
  2. Закройте это. Если вам необходимо выполнять другие рабочие нагрузки на этом сервере, вы можете ограничить объем ОЗУ, который будет резервировать SQL.

Я бы абсолютно не стал использовать вариант 2, если только SQL никогда не использует ОЗУ, которое он поглощает. Вы узнаете об этом только в том случае, если будете измерять счетчики производительности SQL на уровне ОС и представления динамического управления на уровне SQL.

В целом, какую проблему вы на самом деле пытаетесь решить? «Освобождение памяти» в этом сценарии — бессмысленная задача, если вы не знаете, что освобождаете ее для чего-то другого. Есть ли у вас проблемы с производительностью SQL, и если да, то как вы определили, что узким местом является оперативная память, а не, например, плохой дизайн индекса или неоптимизированные запросы?

К чему я вас веду используйте надлежащий мониторинг для диагностики проблем с производительностью. Для этого вам нужно много знать о SQL и прилично знать о Windows. Если вы не являетесь администратором баз данных, наймите его или заключите с ним контракт или работайте с вашим поставщиком программного обеспечения, если это SQL для приобретенного продукта. Если это то, что ваша компания написала сама без администратора баз данных, найдите его.

https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/monitor-memory-usage?view=sql-server-ver15

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

/Редактировать на основе вашего редактирования:

Хоть я и не сисадмин, но мне кажется, что sql server использует мало памяти, потому что все остальное потребляется Окна.

Здесь вы почти наверняка ошибаетесь. Как я упоминал выше, SQL-сервер со временем будет выделять почти всю системную оперативную память. Объем оперативной памяти, используемой процессом sqlserver.exe, НЕ говорит вам, сколько оперативной памяти фактически выделено SQL. DMV и perfcounters скажут вам это.

Я использую SSMS для работы с базами данных и воочию замечаю, как медленно все. Даже такие простые вещи, как открытие панели таблиц, чтобы увидеть все мои таблицы занимают некоторое время, а иногда и время ожидания.

Не запускайте это на сервере SQL, запускайте его со своей рабочей станции.

rbhat avatar
флаг kr
Я хочу уменьшить память служб Windows, чтобы сервер sql потреблял больше памяти. Он не должен постоянно превышать 97%.
mfinni avatar
флаг cn
Нет, вы действительно не знаете. Службы Windows, входящие в состав ОС, работают; Оставь их в покое.
rbhat avatar
флаг kr
Вы говорите, что заголовок столбца памяти диспетчера задач всегда красный?
mfinni avatar
флаг cn
Прочитайте статью, на которую я ссылаюсь, или просто прочитайте соответствующий абзац, который я процитировал в своем ответе.
rbhat avatar
флаг kr
Я обновил вопрос скриншотами диспетчера задач после остановки службы сервера sql и ее повторного запуска. Почему память сейчас составляет 9%, а сервер sql использует больше памяти, чем 96%?
rbhat avatar
флаг kr
К вашему сведению, я запускаю SSMS со своей рабочей станции.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.