WEB开发网
开发学院数据库MSSQL Server SQL Server 2005 中的批编译、重新编译和计划缓存... 阅读

SQL Server 2005 中的批编译、重新编译和计划缓存问题(1)

 2007-05-13 09:24:59 来源:WEB开发网   
核心提示: • 存储过程执行(比如:“EXEC dbo.stored_proc_name”)• 动态 SQL 执行(比如:“EXEC query_string”)• 自动参数化查询对于上述规则,存储过程是一个例外,SQL S

• 存储过程执行(比如:“EXEC dbo.stored_proc_name”)

• 动态 SQL 执行(比如:“EXEC query_string”)

• 自动参数化查询

对于上述规则,存储过程是一个例外。例如,如果两个不同的存储过程都包含“EXEC procA”语句,那么就不会产生 procA 的查询计划和执行上下文重用。

查询计划和执行上下文

当一个可缓存的批处理被提交给 SQL Server 2005 进行执行时,该批处理会被编译,而它的一个查询计划会被放到计划缓存中。查询计划是一种只读的可重入结构(由多个用户共享)。任何时候,查询计划在计划缓存中最多只能有两个实例:一个用于所有的串行执行,另一个用于所有的并行执行。并行执行的副本适用于所有的并行级别。(严格说来,如果相同的用户使用带有相同会话选项的两个不同会话设置的两个相同的查询同时达到 SQL Server 2005,在执行时将存在两个查询计划。但是,当执行结束时,仅有一个查询计划会保留在计划缓存中。)

执行上下文是从查询计划中派生的。执行上下文是为生成查询结果而“执行”的。执行上下文也被缓存和重用。当前执行批处理的每位用户将拥有一个执行上下文,其中保存了特定于其执行的数据(比如:参数值)。虽然被重用,但是执行上下文并不是可重入的(例如,它们是单线程的)。也就是说,在任何时候,一个执行上下文只能执行一个由会话提交的批处理,而在执行时,相应的上下文不会提供给任何其他会话或用户。

查询计划与从中派生的执行上下文之间的关系如下图所示。其中,有一个查询计划,从中派生了三个执行上下文。这些执行上下文包含参数值和特定于用户的信息。对于参数值和特定于用户的信息而言,查询计划都不是明确的。

上一页  2 3 4 5 6 7 8  下一页

Tags:SQL Server 编译

编辑录入:coldstar [复制链接] [打 印]
赞助商链接