SQL Server 2005 вопрос о кеше процедур
Сервер: SQL Server 2005 SP2 64 бит, 32 гигабайта памяти. 2 экземпляра сервера SQL работают. В основном экземпляре, который я использую, видно 20 концертов.
У нас возникает ситуация, когда очень часто очищается весь кеш процедур, что, в свою очередь, вызывает принудительную перекомпиляцию хранимой процедуры (sp). Как только sp находится в кеше, все работает быстро некоторое время. Через пару часов он очищается из кеша и должен быть перекомпилирован, что приведет к быстрому замедлению работы.
Я смотрю кэш с помощью:
SELECT cp.objtype AS PlanType,
OBJECT_NAME(st.objectid,st.dbid) AS ObjectName,
cp.refcounts AS ReferenceCounts,
cp.usecounts AS UseCounts,
st.TEXT AS SQLBatch,
qp.query_plan AS QueryPlan
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
GO
DBCC FREEPROCCACHE никогда не вызывается.
Если я запускаю DBCC MEMORYSTATUS, я вижу, что TotalPages кэша процедур составляет около 500 тыс. Страниц. Получается 3,9 гигабайта, выделенных кешу. Ссылки: планирование кэширования в SQL Server 2008 (раздел, посвященный кэшированию, включает в себя пакет обновления 2 (SP 2) 2005 года). Это говорит о том, что предел давления должен составлять 4,6 гигабайта. (75% видимой целевой памяти из 0-4 ГБ + 10% видимой целевой памяти из 4 ГБ-64 ГБ + 5% видимой целевой памяти> 64 ГБ... 3 ГБ + 1,6 ГБ = 4,6 ГБ)
Кажется, это указывает на то, что мы не должны испытывать давление кеша еще на 700 мегабайт Если статистика менялась, то хранимая процедура все еще должна находиться в кэше и перекомпилироваться при следующем запуске и проверять статистику. Если бы это было так, я бы ожидал, что кэш останется практически постоянного размера.
Любые идеи, что может быть причиной кеширования процедуры, чтобы очистить или что еще я должен следить, чтобы попытаться найти причину?
1 ответ
Настраивается ли max_server_memory на втором экземпляре? Или, что более важно, сумма максимальной установки памяти для двух экземпляров равна меньше, чем общая память на сервере? Если нет, один экземпляр может украсть память у другого.