Я использую RTM-версию SQL Server 2017 в качестве производственной базы данных.
Сервер, на котором размещен SQL Server, имеет 8 процессоров и 32 ГБ памяти.Сервер - Windows Server 2019.
SQL Server имеет ограничения памяти, указанные ниже:
«Минимальная память сервера»: 0
«Максимальная память сервера»: 28 ГБ
Сервер имеет 17 баз данных, а общий размер базы данных составляет около 300 ГБ.
SQL Server отлично работает при повседневных операциях и не использует всю память.В рабочие часы он уходит только до 15-20 ГБ.После полуночи у меня есть задание по обслуживанию индекса (Ola hallangren), и SQL Server потребляет всю память до 28 ГБ во время этой операции с высокой нагрузкой и делает сервер недоступным (даже RDP невозможен), поэтому нам нужно перезапустить сервер с виртуальной машиныконсоль для возврата в нормальное состояние.
Вот что я нашел в SQL ErrorLog:
Недостаточно системной памяти в внутреннем пуле ресурсов для выполнения этого запроса.
FAIL_PAGE_ALLOCATION 8
PS: Resource Governer не включен.
Сегодня вечером я сам начал работу, чтобы посмотреть, чтопроисходит и осознает, что операция STATISTICS UPDATE над статистикой занимает слишком много времени и заполняет весь буферный пул до 28 ГБ, а затем вызывает дамп памяти.Статистика, которая занимает слишком много времени для обновления, относится к таблице размером 50 ГБ.
Что я хочу спросить, насколько я знаю;если SQL Server имеет максимальное ограничение памяти сервера, он потребляет память до этого предела, а затем начинает подкачку на диск.Я никогда не сталкивался с SQL Server, который не заботится о максимальном ограничении памяти.Я также проверил DBCC MEMORYSTATUS
во время операции UPDATE STATISTICS
и увидел, что CLERK_BUFFERPOOL
увеличивается до 28 ГБ.
Любая помощь с тем, что мне не хватает?Если бы эта проблема возникла в рабочее время, я бы с удовольствием увеличил объем памяти сервера, но это происходит только во время операции обслуживания индекса.