`
conceptgut
  • 浏览: 3978 次
文章分类
社区版块
存档分类
最新评论

谈一谈SQL Server中的执行计划缓存

 
阅读更多

为什么需要执行计划缓存

从简介中我们知道,生成执行计划的过程步骤所占的比例众多,会消耗掉各CPU和内存资源。而实际上,查询优化器生成执行计划要做更多的工作,大概分为3部分:

首先,根据传入的查询语句文本,解析表名称、存储过程名称、视图名称等。然后基于逻辑数据操作生成代表查询文本的树。

第二步是优化和简化,比如说将子查询转换成对等的连接、优先应用过滤条件、删除不必要的连接(比如说有索引,可能不需要引用原表)等。

第三步根据数据库中的统计信息,进行基于成本(Cost-based)的评估。

上面三个步骤完成之后,才会生成多个候选执行计划。虽然我们的SQL语句逻辑上只有一个,但是符合这个逻辑顺序的物理获取数据的顺序却可以有多条,打个比方,你希望从北京到上海,即可以做高铁,也可以做飞机,但从北京到上海这个描述是逻辑描述,具体怎么实现路径有多条。那让我们再看一个SQL Server中的举例,比如代码清单1中的查询。

对于该查询来说,无论A先Inner join B还是B先Inner Join C,结果都是一样的,因此可以生成多个执行计划,但一个基本原则是SQL Server不一定会选择最好的执行计划,而是选择足够好的计划,这是由于评估所有的执行计划的成本所消耗的成本不应该过大。最终,SQL Server会根据数据的基数和每一步所消耗的CPU和IO的成本来评估执行计划的成本,所以执行计划的选择重度依赖于统计信息,关于统计信息的相关内容,我就不细说了。

对于前面查询分析器生成执行计划的过程不难看出,该步骤消耗的资源成本也是惊人的。因此当同样的查询执行一次以后,将其缓存起来将会大大减少执行计划的编译,从而提高效率,这就是执行计划缓存存在的初衷。

执行计划所缓存的对象

执行计划所缓存的对象分为4类,分别是:

编译后的计划:编译的执行计划和执行计划的关系就和MSIL和C#的关系一样。

执行上下文:在执行编译的计划时,会有上下文环境。因为编译的计划可以被多个用户共享,但查询需要存储SET信息以及本地变量的值等,因此上下文环境需要对应执行计划进行关联。执行上下文也被称为Executable Plan。

游标:存储的游标状态类似于执行上万国手表价格及图片下文和编译的计划的关系。游标本身只能被某个连接使用,但游标关联的执行计划可以被多个用户共享。

代数树:代数树(也被称为解析树)代表着查询文本。正如我们之前所说,查询分析器不会直接引用查询文本,而是代数树。这里或许你会有疑问,代数树用于生成执行计划,这里还缓存代数树干毛啊?这是因为视图、Default、约束可能会被不同查询重复使用,将这些对象的代数树缓存起来省去了解析的过程。

分享到:
评论

相关推荐

    从统计数据表记录总数谈sqlserver优化

    从统计数据表记录总数谈SQL Server优化 一、引言 在数据库管理中,查询优化是一项重要的技术,它直接影响到查询的效率以及整个系统的性能。在众多的查询类型中,统计数据表记录总数是一种非常常见的需求。例如,...

    浅谈SYBASE的SQL Server及其安装.pdf

    **浅谈SYBASE的SQL Server及其安装** SQL Server是由SYBASE公司开发的一种关系型数据库管理系统,它在客户/服务器架构中扮演着核心角色,支持SQL(结构化查询语言)进行数据管理和访问。本文将深入探讨SQL Server的...

    浅谈SQLServer对于内存的管理【】.docx

    尽管SQL Server对内存的直接配置选项有限,如是否启用AWE(地址窗口扩展)和设置最大/最小内存限制,但其内部如何分配内存给执行计划缓存、数据缓冲区等是自动的。这使得其他技术背景的开发者可能会认为SQL Server在...

    浅谈在ASP中调用SQL Server存储过程.pdf

    存储过程的优势在于它们的重用性、执行效率以及性能优化,一旦存储过程被首次执行,它会被优化并存放在服务器的高速缓存中,之后的执行可以直接调用内存中的缓存,因此大大提高了代码执行速度和效率。 ASP (Active ...

    SQL Server误区30日谈 第5天 AWE在64位SQL SERVER中必须开启

    在SQL Server的世界里,AWE(Address Windowing Extensions)是一个经常被讨论的话题,尤其是在与内存管理和性能优化相关的讨论中。AWE是微软为32位操作系统设计的一种技术,允许应用程序,如SQL Server,在物理内存...

    浅谈SQL Server数据库查询性能的优化 (1).pdf

    总之,SQL Server数据库查询性能的优化是一个综合性的任务,涉及到SQL语句编写、并发控制、硬件配置、物理设计等多个方面。通过全面考虑并针对性地实施优化策略,可以显著提高数据库系统的整体性能,满足日益增长的...

    初谈SQL Server逻辑读、物理读、预读

     本文涉及的内容均不是原创,是记录自己在学习IO、执行计划的过程中学习其他大牛的博客和心得并记录下来,之所以想写下来是为了记录自己在追溯的过程遇到的几个问题,并把这些问题弄清楚。 本章后已贴出原文地址。...

    浅谈Delphi与SQL Server 2000数据库连接方法及其实现过程.pdf

    在Delphi中,使用ADO可以通过ADODB组件库来实现与SQL Server 2000的连接。通过设置Connection对象的ConnectionString属性,指定数据库服务器、数据库名、用户名和密码等信息,就可以建立起与SQL Server的连接。 在...

    浅谈SQL Server 2012列存储索引技术.pdf

    SQL Server 2012 引入了一种创新的索引技术——列存储索引,它显著提升了数据仓库的查询性能,尤其是在决策支持类查询中,可以实现大约10倍的性能提升。列存储索引的核心理念在于将数据按照列而不是行进行组织和存储...

    浅谈SQL Server触发器功能与应用技巧.pdf

    触发器是数据库系统中重要的功能组件,尤其在SQL Server这类关系型数据库管理系统中,触发器承担着维护数据完整性和实施业务逻辑的关键作用。触发器可以视为特殊类型的存储过程,它不是由用户直接调用执行,而是自动...

    谈SQL Server数据库的性能优化.pdf

    SQL Server数据库性能优化是提升数据处理效率的关键环节。在当今数据化、信息化社会,大量数据的管理和高效存储至关重要。数据库自上世纪五十年代发展至今,已成为各行各业不可或缺的工具。优化数据库性能不仅能提高...

    浅谈SQL Server 2005 OLAP基本对象的管理.pdf

    在SQL Server 2005中,SSAS提供了联机分析处理和数据挖掘方法建模、管理和查询数据的全新方法。SSAS支持瘦客户机体系结构,其中计算引擎完全基于服务器,所有的查询在服务器上解析和缓存,而瘦客户机只负责发送请求...

    浅谈网站架构中缓存的应用

    - **内置缓存**:框架或引擎自带的缓存功能,如ORM缓存和SQL Server缓存。 - **自动化缓存**:通过安装特定组件,根据规则自动实现的缓存,如反向代理和输出缓存。 - **编程实现缓存**:需要开发者手动实现的业务...

    浅谈SQL Server对于内存的管理

     理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理。  二级存储(secondary storage)  对于计算机来说,存储体系是分层级的。离CPU越...

    理解SQL SERVER中的逻辑读,预读和物理读

     在谈到几种不同的读取方式之前,首先要理解SQL SERVER数据存储的方式.SQL SERVER存储的最小单位为页(Page).每一页大小为8k,SQL SERVER对于页的读取是原子性,要么读完一页,要么完全不读,不会有中间状态。而页...

    SQL Server误区30日谈 第22天 资源调控器可以调控IO

    然而,正如“SQL Server误区30日谈 第22天”指出的那样,一个常见的误解是资源调控器能够调控输入/输出(I/O)操作。实际上,资源调控器并不具备直接控制I/O的能力,这是一个需要澄清的重要点。 资源调控器的主要...

    浅谈数据库系统优化.docx

    基于代价的优化器会评估不同执行方案的成本,选择最优路径,考虑因素包括缓存策略和I/O成本。基于规则的优化器遵循预设规则,简化优化过程,但可能无法解决复杂场景的优化问题。 总结来说,数据库系统的优化是一项...

    struts2- 2.3.15.3 spring3.2.4 mybatis-3.2.3 通用分页(不同数据库) 拦截器

    当我们谈到“通用分页”时,意味着系统需要能够在不同的数据库(如MySQL、Oracle、SQL Server等)上执行分页查询,而无需针对每种数据库写特定的SQL语句。这通常通过在MyBatis的Mapper XML文件中编写参数化的SQL实现...

Global site tag (gtag.js) - Google Analytics