У меня есть 64-разрядный сервер Windows 2003 с 48 ядрами ЦП и 128 ГБ ОЗУ, на котором запущено одно приложение (SQL 2008 Analysis Services). SSAS в настоящее время использует около 50 ГБ памяти.
SSAS в значительной степени полагается на кэш файлов Windows для хранения часто используемых данных (см. Эта статья, например). На моем сервере кеш файлов Windows обычно находится в диапазоне 10-15 ГБ, но иногда он внезапно падает до 5-6 ГБ (Memory\System Cache Resident Bytes
). Когда это происходит, все чтения страницы SSAS должны идти на диск, а время ожидания запросов начинает истекать до тех пор, пока файловый кеш не заполнится заново.
У меня есть второй сервер (всего 24 ядра, но в остальном почти идентичный), который не проявляет тех же симптомов, даже при запуске одного и того же экземпляра SSAS, тех же запросов и той же нагрузки (это среда с балансировкой нагрузки) .
Я спросил подробный вопрос по SSAS на dba.stackexchange.com, но несколько вопросов о поведении Windows:
Есть ли способ узнать, почему файл базы данных SSAS удаляется из кеша?
Могу ли я предварительно заполнить файловый кеш или каким-либо образом активно управлять им? (Я не уверен, что с использованием RAMDRIVE вариант в нашей среде)
В какой-то момент мы изменили настройку оптимизации сети на сервере на «Максимизировать пропускную способность для обмена файлами», чтобы соответствовать другому параметру, но это, похоже, не имело существенного значения.
редактировать: Добавлен баунти. Если мы не можем ответить «почему», то, возможно, это просто способ лучше понять, какие процессы в настоящее время используют кеш, или какие файлы в нем, или что-то, что может привести нас в правильном направлении.
Обычно я не публикую просто ссылку, но, поскольку вы еще не получили помощи, проверьте этот вне. Это чрезвычайно подробная статья о том, как работает диспетчер кеша.
Каждую секунду выполняется процесс для оценки того, что можно записать на диск и удалить из кеша. Вы конкретно спросили, есть ли способ узнать, какие процессы используют кеш или какие файлы в нем. Я понимаю, что все операции чтения и записи на диск кэшируются, поэтому все процессы, которые читают или записывают на диск, будут «использовать» кеш. Я не нашел способа заглянуть, чтобы увидеть, что это за содержимое.
Данные файла в системном файловом кэше записываются на диск с интервалами, определяемыми операционной системой, и память, ранее использовавшаяся этими файловыми данными, освобождается - это называется очисткой кеша. Политика задержки записи данных в файл и удержания их в кэше до тех пор, пока кэш не будет очищен, называется отложенной записью, и она запускается диспетчером кеша через определенный интервал времени. Время, в которое блок данных файла сбрасывается, частично зависит от количества времени, в течение которого он хранился в кэше, и количества времени, прошедшего с момента последнего доступа к данным в операции чтения.. Это гарантирует, что данные файлов, которые часто читаются, будут оставаться доступными в системном файловом кэше в течение максимального количества времени. подробности
В Server 2003, если диспетчер кэша не пытается записать измененные данные файла обратно в файл, а свободной памяти становится мало, модифицированный записывающий поток диспетчера памяти записывает незаписанные данные обратно в файл. Система не полагается на диспетчер памяти для сброса файловых данных обратно на диск. Вместо этого Cache Manager пытается своевременно записать данные обратно в энергонезависимое хранилище, используя процесс «ленивой записи». Когда программы изменяют данные файла, Cache Manager отслеживает, сколько данных было изменено или «грязно». Менеджер кэша каждую секунду записывает обратно на диск одну восьмую измененных данных кэша. подробности
Какое значение имеет параметр LimitSystemFileCacheSizeMB?
Руководство по эксплуатации служб Analysis Services
http://download.microsoft.com/download/B/E/1/BE1AABB3-6ED8-4C3C-AF91-448AB733B1AF/SSASOpsGuide2008R2.docx
Интересная утилита, которая предоставит вам подробную информацию о том, где используется память сервера, это RAMMap. В частности, в резервном кэше может использоваться память, о которой вы не знаете.