2022年执行计划的缓存和重新使 .pdf
《2022年执行计划的缓存和重新使 .pdf》由会员分享,可在线阅读,更多相关《2022年执行计划的缓存和重新使 .pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、执行计划的缓存和重新使用SQL Server 2008 R2 其他版本SQL Server 有一个用于存储执行计划和数据缓冲区的内存池。池内分配给执行计划或数据缓冲区的百分比随系统状态动态波动。内存池中用于存储执行计划的部分称为过程缓存。SQL Server 执行计划包含下列主要组件:* 查询计划执行计划的主体是一个重入的只读数据结构,可由任意数量的用户使用。这称为查询计划。查询计划中不存储用户上下文。内存中查询计划副本永远不超过两个:一个副本用于所有的串行执行, 另一个用于所有的并行执行。并行副本覆盖所有的并行执行,与并行执行的并行度无关。* 执行上下文每个正在执行查询的用户都有一个包含其执
2、行专用数据(如参数值) 的数据结构。 此数据结构称为执行上下文。执行上下文数据结构可以重新使用。如果用户执行查询而其中的一个结构未使用,将会用新用户的上下文重新初始化该结构。在 SQL Server 中执行任何SQL 语句时,关系引擎将首先查看过程缓存中是否有用于同一SQL 语句的现有执行计划。SQL Server 将重新使用找到的任何现有计划,从而节省重新编译SQL 语句的开销。如果没有现有执行计划,SQL Server 将为查询生成新的执行计划。SQL Server 有一个高效的算法,可查找用于任何特定SQL 语句的现有执行计划。在大多数系统中,这种扫描所使用的最小资源比通过重新使用现有计
3、划而不是编译每个SQL 语句所节省的资源要少。该算法将新的SQL 语句与缓存内现有的未用执行计划相匹配,并要求所有的对象引用完全合法。例如,在下列SELECT 语句中,第一个语句与现有计划不匹配,而第二个语句匹配:SELECT * FROM Person; SELECT * FROM Person.Person; 从过程缓存中删除执行计划只要过程缓存中有足够的存储空间,执行计划将保留在其中。如果存在内存不足的情况,数据库引擎将使用基于开销的方法来确定从过程缓存中删除哪些执行计划。要做出基于开销的决策,数据库引擎将根据以下因素对每个执行计划增加和降低当前开销变量。当某个用户进程将执行计划插入缓存
4、中时,该用户进程会将当前开销设置为等于原始查询编译开销; 对于即席执行计划,该用户进程会将当前开销设置为零。以后,用户进程每次引用执行计划时,都会将当前开销重置为原始编译开销;对于即席执行计划,用户进程会增加当前开销。对于所有计划而言,当前开销的最大值就是原始编译开销。如果存在内存不足的情况,数据库引擎将会把执行计划从过程缓存中删除以进行响应。为了确定删除哪些执行计划,数据库引擎会重复检查每个执行计划的状态并将删除当前开销为零的执行计划。如果存在内存不足的情况,当前开销为零的执行计划不会自动被删除,而只有在数据库引擎检查该执行计划并发现其当前开销为零时,才会删除该计划。 当检查执行计划时,如果
5、当前没有查询使用该计划,则数据库引擎将降低当前开销以将其推向零。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 4 页 - - - - - - - - - 数据库引擎会重复检查执行计划,直至删除了足够多的执行计划,以满足内存需求为止。如果存在内存不足的情况,执行计划可多次对其开销进行增加或降低。如果内存不足的情况已经消失,数据库引擎将不再降低未使用执行计划的当前开销,并且所有执行计划都将保留在过程缓存中,即使其开销为零也是如此。数据库引擎使用资源监视器和用户线程从过程缓存
6、中释放内存,以响应内存不足。资源监视器和用户线程可以检查并发运行的执行计划以降低每个未使用执行计划的当前开销。如果存在全局内存不足的情况,资源监视器将会从过程缓存中删除执行计划。它释放内存以强制实施系统内存、进程内存、资源池内存和所有缓存最大大小的策略。所有缓存的最大大小是缓存池大小的一个函数,不能超出最大服务器内存的大小。有关配置最大服务器内存的详细信息,请参阅sp_configure (Transact-SQL) 中的max server memory 设置。当存在单一高速缓存不足的情况时,用户线程将会从过程缓存中删除执行计划。它们强制实施最大单一缓存大小和最大单一缓存条目数的策略。以下示
7、例说明会从过程缓存中删除哪些执行计划:* 一个经常被引用的执行计划,该计划的开销从未等于零。除非遇到内存不足和当前开销为零的情况,否则该计划保留在过程缓存中,不会被删除。* 插入的一个即席执行计划,并且在内存不足情况出现之前没有再次引用该计划。由于即席计划在初始化后当前开销为零,因此在数据库引擎检查执行计划时,会发现当前开销为零,于是从过程缓存中删除该计划。如果不存在内存不足的情况,当前开销为零的即席执行计划将保留在过程缓存中。若要从缓存中手动删除单个计划或所有计划,请使用DBCC FREEPROCCACHE (Transact-SQL)。重新编译执行计划根据数据库新状态的不同,数据库中的某些
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年执行计划的缓存和重新使 2022 执行 计划 缓存 重新
限制150内