Вчера MS SQL Server преподнес мне сюрприз. При создании новой базы данных он выдал ошибку "There is insufficient system memory in resource pool 'internal' to run this query" и "умер" – сервис SQL Server не запускался, а в ERRORLOG сыпались ошибки:
Почему-то мой MS SQL Server 2019 решил, что у него украли всю память и выставил себе в параметр "max server memory" минимально допустимое значение – 128 мегабайт. Все "танцы с бубном" в попытке реанимировать сервер я описывать не буду, просто расскажу решение по шагам.
У MS SQL Server существует два параметра управляющие использованием памяти:Msg 701, Level 17, State 130, Server XYZ, Line 1 There is insufficient system memory in resource pool 'internal' to run this query.
Параметр | Доступный объем памяти | По умолчанию | Минимально допустимое |
min server memory | Минимальный | 0 | 0 |
max server memory | Максимальный | 2 147 483 647 МБ | 128 МБ |
- Находим в реестре строку запуска службы MS SQL Server и добавляем в нее два параметра:
- f - разрешает только одно соединение и запускает экземпляр MS SQL Server в минимальной конфигурации;
- mSQLCMD - разрешает только одно соединение, которое должно идентифицироваться как "sqlcmd" (что бы никто другой не занял единственный коннект).
- Запускам службу MS SQL Server. Если она не запустилась, то можно дальше не читать.
- Подключаемся к 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)'
- Параметры "min server memory" и "max server memory" являются расширенными, поэтому для работы с ними значение параметра "show advanced options" устанавливаем в 1:
sp_configure 'show advanced options', 1 go reconfigure go
- Меняем значение параметра "max server memory" на нужное значение (например, значение по умолчанию):
sp_configure 'max server memory (mb)', 2147483647 go reconfigure go
- Меняем значение параметра "show advanced options" обратно на 0:
sp_configure 'show advanced options', 0 go reconfigure go
- Из строки запуска службы MS SQL Server убираем добавленные параметры: "-f -mSQLCMD".
- Перезапускаем службу MS SQL Server.
Огромное спасибо. Только что статья буквально спасла рабочий день, так как SQL при изменении размера памяти решил сглючить, полностью убив работоспособность.
ОтветитьУдалить