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,在执行时将存在两个查询计划。但是,当执行结束时,仅有一个查询计划会保留在计划缓存中。)
执行上下文是从查询计划中派生的。执行上下文是为生成查询结果而“执行”的。执行上下文也被缓存和重用。当前执行批处理的每位用户将拥有一个执行上下文,其中保存了特定于其执行的数据(比如:参数值)。虽然被重用,但是执行上下文并不是可重入的(例如,它们是单线程的)。也就是说,在任何时候,一个执行上下文只能执行一个由会话提交的批处理,而在执行时,相应的上下文不会提供给任何其他会话或用户。
查询计划与从中派生的执行上下文之间的关系如下图所示。其中,有一个查询计划,从中派生了三个执行上下文。这些执行上下文包含参数值和特定于用户的信息。对于参数值和特定于用户的信息而言,查询计划都不是明确的。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接