Sql查询过程      

当执行一个Sql语句或者存储过程时, Sql Server的大致过程是

1. 对查询语句进行分析,将其生成逻辑单元,并进行基本的语法检查

2. 生成查询树(会将查询语句中所有操作转换为对基表的操作,比如将视图转换为基表查询)

3. 生成执行计划(针对查询树会生成很多不同的执行计划)

4. 查询优化器基于每个执行计划的查询成本和数据库中的统计信息,选择一个最优执行计划

5. 最优执行计划会被缓存在数据库的缓存池中。当再次执行相同Sql语句时,缓存的执行计划会被直接使用。这样可以提高性能。

查看缓存执行计划DMV  

通过sys.dm_exec_cached_plans可以查询到当前系统缓存的执行计划。比如:如下代码可以查询缓存的所有为存储过程生成的最优执行计划

select * from sys.dm_exec_cached_plans where objtype = 'Proc'

查询结果中显示了该执行计划被重复使用的次数。

注:普通的存储过程是在第一次被执行的的时候才会被编译,然后生成执行计划并缓存。

通过上面对查询过程的描述,我们通过Management Studio直接执行的语句的执行计划也会被缓存。

通过如下查询可以得到缓存的列表

select * from sys.dm_exec_cached_plans where objtype = 'Adhoc'

同时,通过查询sys.dm_exec_text_query_plan可以得到某个查询计划的详细信息。比如:以下代码可以查询上面所描述存储过程的执行计划的详情

declare @planHandle varbinary(64)
SELECT @planHandle = plan_handle from sys.dm_exec_cached_plans where bucketid = 6124
select * from sys.dm_exec_text_query_plan(@planHandle,0,-1)

结果如下:

query_plan列的值是描述执行计划详情的xml

执行计划的管理    

1. 当数据库重启时会被清空。然后我们也可以通过执行DBCC FREEPROCCACHE来清空缓存。

2. 而当数据库内存不足时,也会通过特定的机制将使用频率低的执行计划从缓存中清除。

Sql Server中执行计划的缓存机制的更多相关文章

  1. SQL Server 优化-执行计划

    对于SQL Server的优化来说,优化查询可能是很常见的事情.由于数据库的优化,本身也是一个涉及面比较的广的话题, 因此本文只谈优化查询时如何看懂SQL Server查询计划.毕竟我对SQL Ser ...

  2. 了解Sql Server的执行计划

    前一篇总结了Sql Server Profiler,它主要用来监控数据库,并跟踪生成的sql语句.但是只拿到生成的sql语句没有什么用,我们可以利用这些sql语句,然后结合执行计划来分析sql语句的性 ...

  3. SQL Server中执行Sql字符串,返回执行结果

    今天遇到一个问题:想把sql字符串在SQL Server 中执行了,并获取执行的结果 ); SET @tablename='select @table3 = count(1) from UserVis ...

  4. SQL Server实际执行计划COST"欺骗"案例

    有个系统,昨天Support人员发布了相关升级脚本后,今天发现系统中有个功能不能正常使用了,直接报超时了(Timeout expired)的错误.定位到相关相关存储过程后,然后在优化分析的过程中,又遇 ...

  5. 程序员眼中的 SQL Server-执行计划教会我如何创建索引?

    先说点废话 以前有 DBA 在身边的时候,从来不曾考虑过数据库性能的问题,但是,当一个应用程序从头到脚都由自己完成,而且数据库面对的是接近百万的数据,看着一个页面加载速度像乌龟一样,自己心里真是有种挫 ...

  6. SQL Server-执行计划教会我如何创建索引

    先说点废话 以前有 DBA 在身边的时候,从来不曾考虑过数据库性能的问题,但是,当一个应用程序从头到脚都由自己完成,而且数据库面对的是接近百万的数据,看着一个页面加载速度像乌龟一样,自己心里真是有种挫 ...

  7. SQL SERVER 2012 执行计划走嵌套循环导致性能问题的案例

    开发人员遇到一个及其诡异的的SQL性能问题,这段完整SQL语句如下所示: declare @UserId             INT declare @PSANo              VAR ...

  8. SQL Server 中执行Shell脚本计算本地文件的内容大小

    SQL Server 数据库中除了能执行基本的SQL语句外,也可以执行Shell脚本.默认安装后,SQL中的Shell脚本的功能是关闭的,需要手动打开, 执行以下脚本即可打开该功能. -- 允许配置高 ...

  9. SQL Server中执行正则表达式

    总体方案:写function,再执行update语句. 一.查询函数 -- ============================================= -- Author: <l ...

随机推荐

  1. STM32组合设备实现USB转双串口

    USB转双串口,核心技术就在于组合设备(USB Composite)的实现,组合设备的实现,其核心技术在于描述符的实现,下面我们先给出描述符:设备描述符 [C] 纯文本查看 复制代码 ? 00001 ...

  2. kylin-cube存储结构

    前言 本篇文章通过图文的方式分析不同维度组合下的cube在hbase中的存储结构 需要声明的是,kylin不存原始数据,存储cube 全维度构建 假设一张表有3个字段name,age,sex,那么当通 ...

  3. Gym - 100283F Bakkar In The Army(二分)

    https://vjudge.net/problem/Gym-100283F 题意: 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 .... 给出这样的序列,然后给出一个n,计算从1 ...

  4. 51nod 1040 最大公约数的和 欧拉函数

    1040 最大公约数之和 题目来源: rihkddd 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 给出一个n,求1-n这n个数,同n的最大公约数 ...

  5. JavaScript--语法2--语句结构

    JavaScript--语句结构 一.心得 判断的时候常量放左边java中switch只支持四种类型,javaScript是弱类型,所有的都支持. 显示方法: 77 // alert("x= ...

  6. python学习笔记(HTMLTestRunner在Py3的兼容)

    博主最近开始重构自动化框架并且向Py3上兼容 第一个问题就是生成测试报告的HTMLTestRunner,由于此模块是基于Py2开发的,这里需要修改源码 # 94行 # import StringIO ...

  7. bzoj1058: [ZJOI2007]报表统计 stl xjbg

    小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个可能为负数的整数数列,并且 ...

  8. tomcat 容器下web项目由http改为https操作步骤及相关的坑

    一.https介绍:    HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP ...

  9. UVA-1515 Pool construction (最小割)

    题目大意:有一块地,分成nxm块.有的块上长着草,有的块上是荒地.将任何一块长着草的块上的草拔掉都需要花费d个力气,往任何一块荒地上种上草都需要花费f个力气,在草和荒地之间架一个篱笆需要花费b个力气, ...

  10. IOS-CoreData(增删改查、表关联、分页和模糊查询、多个数据库)

    1>什么是CoreData Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数 ...