08 сентября 2021

Фиксим "There is insufficient system memory in resource pool 'internal' to run this query" при запуске MS SQL Server

    Вчера MS SQL Server преподнес мне сюрприз. При создании новой базы данных он выдал ошибку "There is insufficient system memory in resource pool 'internal' to run this query" и "умер" – сервис SQL Server не запускался, а в ERRORLOG сыпались ошибки:
Msg 701, Level 17, State 130, Server XYZ, Line 1
There is insufficient system memory in resource pool 'internal' to run this query.
    У MS SQL Server существует два параметра управляющие использованием памяти:
ПараметрДоступный объем памятиПо умолчаниюМинимально допустимое
min server memoryМинимальный00
max server memoryМаксимальный2 147 483 647 МБ128 МБ
Почему-то мой MS SQL Server 2019 решил, что у него украли всю память и выставил себе в параметр "max server memory" минимально допустимое значение – 128 мегабайт. Все "танцы с бубном" в попытке реанимировать сервер я описывать не буду, просто расскажу решение по шагам.
  1. Находим в реестре строку запуска службы MS SQL Server и добавляем в нее два параметра:
    • f - разрешает только одно соединение и запускает экземпляр MS SQL Server в минимальной конфигурации;
    • mSQLCMD - разрешает только одно соединение, которое должно идентифицироваться как "sqlcmd" (что бы никто другой не занял единственный коннект).
    Параметр ImagePath службы MSSQLSERVER
  2. Запускам службу MS SQL Server. Если она не запустилась, то можно дальше не читать.
  3. Подключаемся к MS SQL Server используя sqlcmd и проверяем максимально доступный размер памяти у SQL Server:
    select cast(value as integer), cast(value_in_use as integer)
    from sys.configurations
    where name = 'max server memory (MB)'
  4. Параметры "min server memory" и "max server memory" являются расширенными, поэтому для работы с ними значение параметра "show advanced options" устанавливаем в 1:
    sp_configure 'show advanced options', 1
    go
    reconfigure
    go
  5. Меняем значение параметра "max server memory" на нужное значение (например, значение по умолчанию):
    sp_configure 'max server memory (mb)', 2147483647
    go
    reconfigure
    go
  6. Меняем значение параметра "show advanced options" обратно на 0:
    sp_configure 'show advanced options', 0
    go
    reconfigure
    go
  7. Из строки запуска службы MS SQL Server убираем добавленные параметры: "-f -mSQLCMD".
  8. Перезапускаем службу MS SQL Server.
Изменение параметра 'max server memory (mb)'

1 комментарий:

  1. Огромное спасибо. Только что статья буквально спасла рабочий день, так как SQL при изменении размера памяти решил сглючить, полностью убив работоспособность.

    ОтветитьУдалить