| 论坛登陆 注册 | 教程 笑话 影视 投稿 |
![]() |
|
||||||||||||||||||||||||||||||||||||||||
SQL Server 2005中的批编译、重新编译和计划缓存问题(1) |
|
| www.xker.com 作者: 来源:microsoft 加入日期:2006-3-8 8:56:16 | |
【导读】本文阐述了批处理在 SQL Server 2005 中的缓存和重用方式,并就最大限度重用已缓存的计划提供了相应的最佳实务。另外,文中还说明了一些重新编译批处理的方案,并针对减少或消除不必要的重新编译,给出了最佳实务。
一、本白皮书的目的 此白皮书的目的有几个。阐述了批处理在 SQL Server 2005 中的缓存和重用方式,并就最大限度重用已缓存的计划提供了相应的最佳实务。另外,文中还说明了一些重新编译批处理的方案,并针对减少或消除不必要的重新编译,给出了最佳实务。本白皮书阐述了 SQL Server 2005 的“语句级重新编译”功能。另外,还介绍了许多工具及实用程序,它们可在查询编译、查询重新编译、计划缓存和计划重用过程中充当很有用的观测工具。我们在整篇文章中对比了 SQL Server 2000 和 SQL Server 2005 的不同表现,以便读者能够更好地了解文中的内容。本文档所列举的语句均适用于 SQL Server 2000 和 SQL Server 2005。同时,明确指出了这两个 SQL Server 版本在行为上的差异。 本文面向三类读者: 用户:使用、维护并为 SQL Server 开发应用程序的人员。初识 SQL Server 2005 的用户及正从 SQL Server 2000 进行迁移的人员将在这里找到有用的信息。 开发人员:SQL Server 开发人员将在这里找到有用的背景信息。 测试人员和项目经理:本文档将对“SQL Server 2005 中的编译和重新编译”功能提供说明。 二、重新编译:定义 在查询、批处理、存储过程、触发器、被准备语句或动态 SQL 语句(以下称为“批处理”)在 SQL Server 上开始执行以前,批处理将被编译成计划。然后,将执行该计划以便发挥其效力或生成结果。 一个批处理可包含一个或多个 SELECT、INSERT、UPDATE 和 DELETE 语句、存储过程调用(T-SQL“粘连”或控制结构(比如:SET、IF、WHILE、DECLARE)可能使其产生交错)、DDL 语句(比如:CREATE、DROP)以及与权限相关的语句(比如:GRANT、DENY 和 REVOKE)。批处理还可包含 CLR 构造的定义和用法(比如:用户定义的类型、函数、过程和聚合)。 已编译的计划被保存到 SQL Server 的一部分内存中,这部分内存称为计划缓存。将搜索计划缓存以获得重用计划的机会。如果对某个批处理重用计划,就可避免编译工作。请注意,在有关 SQL Server 的文献中,过去所用的“过程缓存”一词在本文中被称为“计划缓存”。“计划缓存”用词更准确,因为计划缓存不仅仅保存存储过程的查询计划。 在涉及 SQL Server 的用语中,上段所提到的编译过程有时会被误认为是“重新编译”,但该过程仅涉及“编译”。 重新编译的定义:假设某个批处理被编译成一个或多个查询计划的集合。在 SQL Server 开始执行任何单独的查询计划之前,服务器将检查该查询计划的有效性(正确性)和最优性。如果某个检查失败了,将重新编译相应查询计划所对应的语句或整个批处理,并可能生成一个不同的查询计划。这种编译称为“重新编译”。 请特别注意,不必预先缓存该批处理的查询计划。实际上,某些批处理类型从不被缓存,但仍能引发重新编译。举个例,有个批处理包含一个大于 8 KB 的文本。假设该批处理创建了一个临时表,并在表中插入了 20 行。所插入的第七行将导致重新编译,但由于其包含的文本较大,将不缓存该批处理。 编辑:xker.com上一篇:SQL Server 2005中的批编译、重新编译和计划缓存问题(2) 下一篇:没有了 |
||
| 【关闭窗口】【技术交流】【收藏此页】 |
| 相关文章 | ||
|
| 评论 | |
设为首页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
|
| Copyright © 2003-2006 xker.com All rights reserved.小新技术网 合作广告QQ:12231446 | |
|
|
| 本页浏览次数: |