У меня есть один узел SQL2012 SP4 с несколькими базами данных.
На сервере доступно 20 ГБ памяти, 14 ГБ выделено для SQL (больше ничего не работает на коробке).
Каждые несколько минут SQL сбрасывает весь буферный кеш. Ожидаемая продолжительность жизни страницы равна нулю, дескрипторы буферного кэша показывают, что в кэше ничего нет.
Я посмотрел на уведомления монитора ресурсов, и уведомления отскакивают от высокого / устойчивого / низкого значения каждые несколько миллисекунд:
RESOURCE_MEMPHYSICAL_HIGH RESOURCE_MEM_STEADY RESOURCE_MEMPHYSICAL_LOW
С отметками времени, которые находятся на расстоянии нескольких миллисекунд. PLE, по сути, является пилообразным рисунком.
Я видел это раньше с SQL2012 SP1 и этот вопрос:
Бесплатные страницы SQL Server 2012 в буферном кеше не используются
Кажется, похожая проблема, хотя я уже обновился до SP4.
Я попытался включить LPIM для служебной учетной записи, и я попытался возиться с настройкой максимальной памяти. Снижение максимального объема памяти, по-видимому, привело к более частому опустошению буферного кэша.
Есть идеи, что проверить дальше?
Нагрузка на сервер буквально ничто (я прокручиваю списки элементов в системе ERP, и она достигает около 40-50 МБ, прежде чем кэш просто снова падает).
Это интересно, потому что я обновил SP1, чтобы попытаться это исправить - кэш там занимал около 500 МБ. С тех пор я уменьшил максимальную настройку памяти до 14 ГБ, что, похоже, ухудшило ее.
Мне интересно, если Windows паникует и выдает неправильные уведомления о нехватке памяти в SQL - из этого следует, что сервер с максимальной памятью, установленной на неограниченную, казался работающим нормально, но никогда не заполнял кеш больше, чем несколько сотен МБ - но теперь это едва доходит до 50 ...
Больше информации: для тех, кто спросил
Количество ядер: 4
Размер базы данных: 80 ГБ
Журнал ошибок показывает: A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 0 seconds. Working set (KB): 247928, committed (KB): 495656, memory utilization: 50%.
Результаты запуска скриптов по этой ссылке: https://www.sqlskills.com/blogs/jonathan/identifying-external-memory-pressure-with-dm_os_ring_buffers-and-ring_buffer_resource_monitor/
Не уверен, как их интерпретировать - похоже, что в разное время наблюдается как внутреннее, так и внешнее давление памяти.
Еще больше информации:
Это гость Hyper-V, сидящий на хосте с общим объемом оперативной памяти 96 ГБ, из которых примерно половина выделяется для гостей.
Симптомы кажутся похожими на это:
SQL Server 2012 x64 - невозможно безопасно выделить более 50% оперативной памяти
Однако, когда я выделил 14 ГБ для SQL, симптомы сразу же проявились (только 3 ГБ памяти сервера было выделено)
Прошлой ночью я увеличил гостевую память до 32 ГБ, и проблема исчезла, но я вижу только 14 ГБ фиксации общей серверной памяти (а бизнес, который управляет БД, сегодня утром занят, и именно тогда у них обычно возникают проблемы с производительностью).
Около 8-9 Гбайт данных в кеше на данный момент кажется стабильным.
Похоже, что для этой нагрузки достаточно 20 ГБ. Я рад, что пока у меня осталось 32 ГБ, но я бы очень хотел разобраться с этим, чтобы лучше настроить виртуальные машины / SQL.
Я буду копать и обновлять, если найду ответ!
Еще больше информации:
Я не перезапускал SQL после включения LPIM (не понимая, что это было требованием), но я оставил этот параметр включенным и перезапустил его, чтобы обновить память, так что теперь я не уверен, что увеличение памяти или LPIM уменьшило проблемы.
Сегодня вечером, когда сервер простаивает, он запустится и снова проверит, как он выглядит на 20 ГБ.
Еще дальше Подробнее Подробнее:
В настоящее время сервер работает нормально с выделенным 32 ГБ, и с тех пор мы не видели проблемы. Если это всплывет снова, я вернусь к этому вопросу и продолжу копать.
В настоящее время остается загадкой, но я предполагаю, что на данный момент я лишь маскирую проблемы.