奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 数据库 >> MSSQL >> SQL Server 2005 中的批编译、重新编译和计划缓存问题(1)
数据库
Access
SQL Server
MySQL
DB2
Oracle
Sybase
  • Linux下安装支持ssl连

  • 在同一台机运行多个My

  • 我的MYSQL安装笔记拿出

  • 写了个简单的数据库自

  • win2003 64位系统下as

  • SQL SERVER内存会不断

  • SQL Server 2005数据库

  • SQL Server 2005数据库

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

    中华网络安全联盟    作者:佚名    来源:网络转载    时间:2006-3-23

    一、本白皮书的目的

    此白皮书的目的有几个。阐述了批处理在 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 行。所插入的第七行将导致重新编译,但由于其包含的文本较大,将不缓存该批处理。

    在 SQL Server 中执行的多数重新编译都是有根据的。有些是为了确保语句的正确性;另一些是为了在 SQL Server 数据库中的数据发生变化时,获得最佳的查询执行计划。然而,重新编译有时会大大延缓批处理执行的速度。这时,就有必要减少进行重新编译的次数。

    三、比较 SQL Server 2000 和 SQL Server 2005 中的重新编译

    在 SQL Server 2000 中重新编译批处理时,将重新编译批处理中的所有语句,而不仅仅是触发重新编译的语句。SQL Server 2005 在该行为上做了改进,只编译导致重新编译的语句,而不是整个批处理。与 SQL Server 2000 相比,这一“语句级重新编译”功能将改善 SQL Server 2005 的重新编译行为。尤其,在批处理重新编译过程中,SQL Server 2005 所用的 CPU 时间和内存更少,而得到的编译块也更少。

    语句级重新编译有一个优点显而易见:不必再只是为了减少较长的存储过程的重新编译罚点,而将其分成多个较短的存储过程。




      
    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.