Bei einer unserer SQL Server 2014-Instanzen besteht eine merkwürdige Diskrepanz zwischen der Speichermenge, die für zwischengespeicherte Pläne gemäß sys.dm_exec_cached_plans verwendet wird, und der Speichermenge, die gemäß sys.dm_os_memory_clerks für den Typ CACHESTORE_SQLCP verwendet wird (was ich verstehe) ist für zwischengespeicherte Ad-hoc-Abfragepläne).
Wenn wir die zwischengespeicherten Pläne wie folgt abfragen:
select cp.cacheobjtype, cp.objtype,
sum(cast(cp.size_in_bytes as money))/1024/1024 as sizeMB
from sys.dm_exec_cached_plans as cp
group by cp.cacheobjtype, cp.objtype;
Dann scheinen insgesamt etwa 90 MB für zwischengespeicherte Pläne verwendet zu werden, wobei nur 2 MB für Ad-hoc-Pläne verwendet werden. Es gibt auch nur 300 Pläne im Cache.
Wenn wir uns jedoch die Ansicht dm_os_memory_clerks wie folgt ansehen:
select mc.type, mc.pages_kb/1024 as pagesMB
from sys.dm_os_memory_clerks as mc
where mc.type = 'CACHESTORE_SQLCP'
dann wird berichtet, dass ungefähr 12 GB verwendet werden. Unsere Instanz hat ca. 300 GB RAM drin.
Wir möchten die Diskrepanz verstehen und im Idealfall einige Schritte unternehmen, um sicherzustellen, dass der Plan-Cache effektiv genutzt wird (dh mehr als 300 Pläne zur Verbesserung der Cache-Trefferquote, die derzeit sehr schlecht ist). Diesen Raum berücksichtigen zu können, wäre der erste Schritt.
Irgendwelche Gedanken darüber, was die Diskrepanz sein könnte und warum dieser Bereich nicht zum Zwischenspeichern von Plänen verwendet wird?
money
?