sqlserver执行计划缓存(1)

sqlserver执行计划缓存(1)

ID:28447658

大小:77.50 KB

页数:7页

时间:2018-12-10

sqlserver执行计划缓存(1)_第1页
sqlserver执行计划缓存(1)_第2页
sqlserver执行计划缓存(1)_第3页
sqlserver执行计划缓存(1)_第4页
sqlserver执行计划缓存(1)_第5页
资源描述:

《sqlserver执行计划缓存(1)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、SQLServer执行计划纟爰存(1)概述了解执行计划对数据库性能分析很重要,其中涉及到了语句性能分析与存储,这也是写这篇文章的目的,在了解执行计划之前先要了解一些基础知识,所以文章前面会讲一些概念,学起来会比较枯燥,但是这些基础知识非常重要。基础概念SQLServer有一个用于存储执行计划和数据缓冲区的内存池。池内分配给执行计划或数据缓冲区的百分比随系统状态动态波动。内存池中用于存储执行计划的部分称为过程缓存。SQLServer执行计划包含下列主要组件:查询计划执行计划的主体是一个重入的只读数据结构,可由任意数

2、量的用户使用。这称为查询计划。查询计划中不存储用户上下文。内存中查询计划副本永远不超过两个:一个副本用于所有的串行执行,另一个用于所有的并行执行。并行副本覆盖所有的并行执行,与并行执行的并行度无关执行上下文每个正在执行查询的用户都有一个包含其执行专用数据(如参数值)的数据结构。此数据结构称为执行上下文。执行上下文数据结构可以重新使用。如果用户执行查询而其中的一个结构未使用,将会用新用户的上下文重新初始化该结构。怎样缓存执行计划SQLServer有一个高效的算法,可查找用于任何特定SQL语句的现有执行计划。在SQL

3、Server中执行任何SQL语句时,关系引擎将首先查看过程缓存中是否有用于同一SQL语句的现有执行计划。SQLServer将重新使用找到的任何现有计划,从而节省重新编译SQL语句的开销。如果没有现有执行计划,SQLServer将为查询生成新的执行计划SQLServer自动删除执行计划什么情况下会删除执行计划在没有人工手动清除缓存的情况下,如果出现内存不足的情况下SQLServer会自动清除一部分没被利用到的缓存计划。所有缓存的最大大小取决于maxservermemory的大小怎样判断需要删除的执行计划如果存在内存

4、不足的情况,数据库引擎将使用基于开销的方法来确定从过程缓存中删除哪些执行计划。怎样确定一个执行计划的开销呢,对于一个第一次执行的执行计划3QLServer将它的开销值设为0,被多次执行过的执行计划SQLServer将它的开销值设置为原始编译开销,所以数据库引擎会重复检查每个执行计划的状态并将删除当前开销为零的执行计划。如果存在内存不足的情况,当前开销为零的执行计划不会自动被删除,而只有在数据库引擎检查该执行计划并发现其当前开销为零时,才会删除该计划。当检查执行计划时,如果当前没有查询使用该计划,则数据库引擎将降低

5、当前开销以将其推向零。数据库引擎会重复检查执行计划,直至删除了足够多的执行计划,以满足内存需求为止。如果存在内存不足的情况,执行计划可多次对其开销进行增加或降低。如果内存不足的情况己经消失,数据库引擎将不再降低未使用执行计划的当前开销,并且所有执行计划都将保留在过程缓存中,即使其开销为零也是如此。重新编译执行计划根据数据库新状态的不同,数据库中的某些更改可能导致执行计划效率降低或无效。SQLServer将检测到使执行计划无效的更改,并将计划标记为无效。此后,必须为执行查询的下一个连接重新编译新的计划。导致计划无效

6、的情况包括:对查询所引用的表或视图进行更改(ALTERTABLE和ALTERVIEW)0对执行计划所使用的任何索引进行更改。对执行计划所使用的统计信息进行更新,这些更新可能是从语句(如UPDATESTATISTICS)中显式生成,也可能是自动生成的。删除执行计划所使用的索引。显式调用sp_recompile。对键的大量更改(其他用户对由查询引用的表使用INSERT或DELETE语句所产生的修改)。对于带触发器的表,插入的或删除的表内的行数显著增长使用WITHRECOMPILE选项执行存储过程测试1.缓存的每一个对

7、象返回一行,包括缓存计划的类型、缓存引用的对象、缓存计划占用的空间、被使用次数、以及创建时间等SELECT^FROMsys.syscacheobjects;一2.缓存的每个查询计划返回一行,包括执行计划被使用的次数、执行计划的大小、内存地址、执行计划的类型、语句等SELECT^FROMsys.dm_exec_cached_plansGO3.返回由指定的sql_handle标识的SQL批处理的文本/*其中sql_handle来自:sys.dmexec_query_statssys.dm_exec_requestss

8、ys.dm_exec_cursorssys.dm_exec_xml_handlessys.dm_execquerymemory_grantssys.dm_exec_connectionsplanhandle来自:sys.dm_exec_cached_plans*/SELECT氺FROMsys.dm_exec_sql_text(sql_handle

9、planhandie);

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。