首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL DMV查询和缓存计划

SQL DMV查询和缓存计划
EN

Stack Overflow用户
提问于 2010-07-19 21:23:30
回答 2查看 1.3K关注 0票数 1

我的理解是,SQL Server中的一些DMV依赖于缓存的查询计划。我的问题是这些。是否缓存了所有查询计划?如果没有,什么时候不缓存查询计划?对于缓存的缓存,它们会在缓存中保留多长时间?

非常感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-19 21:43:46

一些SQL Server DMV捕获与查询计划缓存直接相关的令牌,它们受到施加在查询计划缓存上的内存压力的支配(由于即席查询、其他内存使用和高活动,或通过重新编译)。查询计划缓存会受到计划老化的影响(例如,一个成本为10的计划被引用了5次,其"age“值为50):

如果满足以下条件,计划将从内存中删除:

·系统需要更多内存

·该计划的“年龄”已达到零

·该计划当前未被现有连接Ref引用。

那些与查询计划缓存没有直接关系的DMV会在“一般”内存压力(缓存数据页)或sql server服务重启的情况下被刷新。

自SQL Server2000以来,影响查询计划缓存的因素略有变化。SQL Server2008的最新参考资料在此处:Plan Caching in SQL Server 2008

票数 2
EN

Stack Overflow用户

发布于 2010-07-20 02:02:13

我只想添加一些极客细节:查询计划缓存利用了SQL Server的通用缓存机制。这些缓存使用Clock algorithm进行驱逐,请参见Q and A: Clock Hands - what are they for。对于查询计划缓存,条目的成本考虑了创建缓存条目所需的时间、IO和内存。

对于已缓存的缓存,它们会在缓存中保留多长时间?

一个有效的对象会一直留在缓存中,直到时钟指针将开销减到0。参见sys.dm_os_memory_cache_clock_hands。这个问题没有绝对的时间答案,时钟指针可以在一秒、一小时、一周或一年内将条目减少到0。这完全取决于条目的初始成本(查询/模式复杂性)、重用计划的频率以及时钟指针速度(内存压力)。

但是,缓存的对象可能会失效。查询计划失效的各种原因在Mitch:Plan Caching in SQL Server 2008链接的白皮书中有非常详细的解释。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3281403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档