第1周 SQL Server 如何执行一个查询
大家好,欢迎来到第1周的SQL Server性能调优培训。在我们进入SQL Server性能调优里枯燥难懂的细节内容之前,我想通过讲解SQL Server如何执行一个查询来建立基础。这个部分非常重要,因为接下来的培训中我们会以这些概念来加深我们对SQL Server的认识。
当我们执行一个查询时,在SQL Server中最重要的组件有哪些,下面这张图片可以给大家一个概观的认识。

可以看到,SQL Server内部分成了2个部分:关系引擎和存储引擎。在关系引擎中最大的一个组件是查询优化器。查询优化器唯一和仅有的任务是把我们传入的查询语句生成实际的执行计划。
读取数据
我们提交给SQL Server 的查询,通过协议层传给命令分析器。命令分析器会检查我们是否提供了一个语法正确的语句,我们所提到的表和列在数据库里是否存在。命令分析器会生成可以重现我们查询的查询树。查询树会被查询优化器用来生成执行计划。
然后编译后的执行计划会提交给查询执行器。查询执行器的任务是执行执行计划。但是为了以后的重用,首先它会把编译好的执行计划放在执行计划缓存区进行缓存。在SQL Server 中计划缓存是个强大同时又是一个非常危险的概念。我们会在第10周讨论计划缓存的时学到更多的细节。
执行计划被缓存后,查询执行器与存储引擎进行互动,并在执行计划里执行每个操作。当我们在执行计划里访问数据时,存取方法会向缓冲区管理器读取我们想要指定页。下周我们将讨论SQL Server中页的更多细节。现在你只要知道页是8Kb的缓存,在那里存放着我们的表和索引数据。缓冲管理器管理着缓冲池(缓冲池包含执行计划缓存区和数据缓存区),那里存放着我们8kb大小的页。缓冲池是SQL Server的主要内存消耗,它的大小我们可以通过服务器属性->内存->最小、最大服务器内存(MB)来配置。
当请求的页面已经被存在缓冲池时,页会被立即读取。在SQL Server里这个被称为逻辑读。如果请求的页没存在缓冲池,缓冲区管理器会发起异步I/O操作把请求的页从我们的存储子系统中读到缓冲池,这个被称为物理读。在异步I/O操作期间,我们的查询需要一直等到操作结束才继续。在第22周我们会讨论等待和等待统计的更多细节。
一旦页被读取到缓冲池,页会被请求的访问方法取走。当执行计划执行完成后,产生的数据会通过协议层返回给提交查询的程序。
修改数据
当我们与使用修改数据的TSQL语句(INSERT,UPDATE,DELETE,MERGE)打交道时,存储引擎同样与事务管理器进行交互。事务管理器把执行事务中描述我们所做的改变通过事务日志写到事务文件。当这些日志记录写好后,事务就可以提交了。事务执行有多快,你的数据修改就有多快。
在内存中被修改的页通过称为检查点过程写回存储子系统。默认情况下,检查点每一分钟从缓冲区管理器请求所有的脏页并执行一次。脏页就是在内存里被修改,但还没有写回存储的。一旦脏页被写回存储,这个页就会被标记为干净页。
小结
从上面的描述我们可以看到,当你执行一个SQL语句查询时,SQL Server里面发生了很多不同的事情。如果你想了解更多SQL Server里各个组件间的相互操作,我强烈推荐看下SQL Server团队成员Remus Rusanu这个帖子http://rusanu.com/2013/08/01/understanding-how-sql-server-executes-a-query/。(注中文版:带你理解SQL Server如何执行一个查询)
上面提到的各个组件如果出现问题,都会触发SQL Server的性能问题,这些问题最后都要靠你来解决。下周我们见到的时候,将一起讨论下SQL Server中的页。
第1周 SQL Server 如何执行一个查询的更多相关文章
- 第1/24周 SQL Server 如何执行一个查询
大家好,欢迎来到第1周的SQL Server性能调优培训.在我们进入SQL Server性能调优里枯燥难懂的细节内容之前,我想通过讲解SQL Server如何执行一个查询来建立基础.这个部分非常重要, ...
- sql是如何执行一个查询的!
引用自:http://rusanu.com/2013/08/01/understanding-how-sql-server-executes-a-query/ Understanding how SQ ...
- SQL Server存储过程执行一个带返回值(output)的存储过程
语法如下: --存储过程一CREATE PROCEDURE testProc @out VARCHAR(500) OUTPUT AS BEGIN SET @out='操作成功' RETURNEND - ...
- sql server 根据执行计划查询耗时操作
with QS as( select cp.objtype as object_type, /*类型*/ db_name(st.dbid) as [database], /*数据库*/ object_ ...
- 第0/24周 SQL Server 性能调优培训引言
大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录. 作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤浅,博而不专,到现在我才发现自己的兴趣所在,于 ...
- SQL Server 优化-执行计划
对于SQL Server的优化来说,优化查询可能是很常见的事情.由于数据库的优化,本身也是一个涉及面比较的广的话题, 因此本文只谈优化查询时如何看懂SQL Server查询计划.毕竟我对SQL Ser ...
- 对于超大型SQL SERVER数据库执行DBCC操作
原文:对于超大型SQL SERVER数据库执行DBCC操作 对于数据库维护,主要使用DBCC CHECKDB来实现,以下是对大型数据库的使用说明,小型数据库一般直接使用就可以了: 1.2008(200 ...
- 第16/24周 SQL Server 2014中的基数计算
大家好,欢迎回到性能调优培训.上个星期我们讨论在SQL Server里基数计算过程里的一些问题.今天我们继续详细谈下,SQL Server 2014里引入的新基数计算. 新基数计算 SQL Serve ...
- SQL Server获取下一个编码字符串的实现方案分割和进位
我在前一种解决方案SQL Server获取下一个编码字符实现和后一种解决方案SQL Server获取下一个编码字符实现继续重构与增强两篇博文中均提供了一种解决编码的方案,考虑良久对比以上两种方 ...
随机推荐
- web desktop在线演示
http://mydesk.sinaapp.com 基于extjs的web desktop应用框架. 1.跨浏览器 2.动态载入所需css,js文件 3.权限管理 4.支持多语种 5.支持asp,js ...
- Memcahce(MC)系列(一)Memcache介绍、使用、存储、算法、优化
写在前面:前不久在工作中被问到关于MC一致哈希的问题,由于时隔太久差点儿忘记,特前来恶补一下MC,下面是前几年在工作中学习MC时的一些资料,来历不明,特整理一下,希望对大家的学习也能有帮助. 32 的 ...
- php获取server端mac和clientmac的地址
获取servermac <?php /** 获取网卡的MAC地址原码:眼下支持WIN/LINUX系统 获取机器网卡的物理(MAC)地址 **/ class GetmacAddr{ var $re ...
- LINUX编程学习笔记(十三) 遍历目录的两种方法
1 默认情况下 实际用户和有效用户是一样的 实际用户:执行用户 有效用户:权限用户 getuid() 实际用户 geteuid() 有效用户 chmod u+s 之后 ,其他人执行文件时,实际 ...
- MySQLdb的安装与使用
一.安装 安装已编译版本号(此方法简便快捷): http://www.codegood.com/downloads 依据自己系统下载,双击安装,搞定 然后import MySQLdb.查看是否成功 我 ...
- struts2对action中的方法进行输入校验(2)
struts2输入校验流程: 1.类型转换器对请求參数运行类型转换,并把转换后的值赋给aciton中的属性 2.假设在运行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext, ...
- 为什么php时间阅读RTF,p标签会出现红色
为什么php读取富文本的时候,p标签会出现红线,怎么去掉,哪位大侠帮解决?跪求答案 就像以下一样,一遇到p标签就有红虚线 版权声明:本文博客原创文章,博客,未经同意,不得转载.
- UltraEdit破解方法最强收录
作为一个能够满足你一切编辑需求的强大文本编辑器.ultraedit在IT届有着非常高的人气.只是它正版的价钱也是不廉价滴,没记错的话是要好几十刀. 那么对于我们来说,破解UltraEdit就是一项必备 ...
- GitHub基本操作(转)
一.上传代码到仓库 步骤一:创建本地仓库,如下: 创建结果: 步骤二:发布自己创建的仓库,如下: 发布完显示如下: 步骤三:向自己发布仓库上传代码,如下: 首先将代码复制到本地仓库,如下: 复制完,显 ...
- android中更改spinner、AutoCompleteTextView切割线的颜色
话说去除切割线的方法找了非常久也没找到,最终发现了更改切割线的方法 spinner和AutoCompleteTextView提示列表中间有一条黑色的切割线.想要改变它的颜色值,就要重写style. 1 ...