1
计划缓存大小和保留内存
当运行包括实际执行计划在内的查询时,根运算符(SELECT)告诉我缓存计划大小为32KB。 该连接的查询sys.dm_exec_cached_plans和sys.dm_os_memory_objects,看问题的计划,称该值pages_in_bytes和max_pages_in_bytes为32768(32KB),它匹配缓存计划的大小。 我不明白的是sys.dm_exec_cached_plans.size_in_bytes49152(48KB)中的值代表什么。我已经在所有这些专栏中阅读了BOL,尤其是size_in_bytes这样说: “ 缓存对象消耗的字节数。 ” 我无法理解难题的最后一部分,以了解其真正含义。 我知道所有运算符(不是在谈论用于排序和散列的额外内存授予)都需要一定数量的固定内存来存储状态,进行计算等,这些内存与优化后的计划一起存储在缓存中,但是在哪里? 因此,我的问题是: 到底是size_in_bytes什么意思 为什么它的值比“缓存的计划大小”高? 为所有操作员/迭代器保留的固定内存量是哪里,是使用“缓存的计划大小”(在我的示例中为32Kb)还是其他任何地方? 我知道它们是具有不同功能的不同DMV,但它们是相关的。在编译(缓存)计划sys.dm_exec_cached_plans加入sys.dm_os_memory_objects在memory_object_address列。我在此处发布问题的原因是,我正在寻求帮助,了解如何解释DMV及其列。 如果size_in_bytes是缓存的计划大小,为什么SQL Server在实际执行计划中说另一个值? 新查询,新数字: 实际计划 缓存的计划大小16KB 编译内存96KB DMV: sys.dm_exec_cached_plans.size_in_bytes 24KB sys.dm_os_memory_objects.pages_in_bytes, .max_pages_in_bytes 16KB。 另外,请注意,此查询不需要任何其他内存授予即可进行排序和哈希操作。 Microsoft SQL Server 2012-11.0.5343.0(X64)