为了缩小读取操作所涉及范围,本文首先着眼于简单的SELECT查询,然后引入执行更新操作有关的附加过程。最后你会读到,优化性能时SQLServer使用还原工具的相关术语和流程。

关系和存储引擎

如图所示,SQL Server被分为2个主要引擎:关系引擎存储引擎关系引擎有时也被称为查询处理器,因为它的主要功能是查询优化和执行。它包含检查查询语法和准备查询树的命令解析器查询优化器毫无疑问是任何数据库系统中皇冠上的宝石;查询执行器对执行(查询计划)负责。

存储引擎对所有数据输入、输出管理负责。它包含用来处理行、索引、页、分配和行版本等修改的输入、输出请求的存取方法缓存区管理器,与SQL Server主要内存用户缓冲池打交道。它还包含处理用来维持一致性(ACID)的数据锁和管理事务日志的事务管理器

缓冲池

在进入查询生命周期之前你需要知道的其它主要组件是缓冲池,在SQL Server中是最大的内存用户。缓冲池里包含SQL Server中的所有不同缓存,包括计划缓存和数据缓存,计划缓存会接在透过它生命周期的查询后的章节谈到。

一个简单的SELECT查询

在这个例子中,使用的查询细节不重要——没有join的简单SELECT语句,因为你只是发起一起简单的读取请求。从客户端开始,那里你首先接触的组件是SQL Server网络接口(SNI)。

SQL Server网络接口(SNI)

SQL Server网络接口(SNI)是建立客户端和服务器端网络连接的协议层。它由数据库引擎和SQL Server本地客户(SQL Server Native Client:SNAC)都用到的一系列API组成。SNI代表在SQL Server 2000里建立的网络库和包含在操作系统里的微软数据访问组件(Microsoft Data Access Components:MDAC)。

SNI不是被直接配置的;你要配置在客户端和服务器端的网络协议。SQL Server支持下列协议:

  • 共享内存(Shared memory)——简单、快速,共享内存是用来连接本地(与SQL Server一样的计算机)运行客户端的默认协议。只能用在本地,没有配置属性,当从本地机器连接时始终是首次尝试的。
  • TCP/IP——这是最常用于SQL Server的访问协议。它通过指定IP地址和端口号使你可以连接到SQL Server。通常,当你指定一个连接实例时它会自动发生。你的内部命名解析系统解析实例名的主机名为IP地址,不管你为默认实例连接到默认TCP 1433端口还是用SQL浏览服务为命名实例使用UDP 1434找到正确的端口。
  • 命名管道(Named Pipes)——TCP/IP和命名管道(Named Pipes)是在架构里被使用的兼容协议。命名管道(Named Pipes)被开发来用于局域网(LANs),但也可以被不高效的用于低速网络,例如广域网(WANs)。

使用命名管道(Named Pipes)首先需要在为SQL Server配置管理器(SQL Server Configuration Manager)使它生效(如果你要远程连接的话),然后创建一个使用命名管道(Named Pipes)作为协议连接到服务器的SQL Server别名。

命名管道(Named Pipes)使用TCP 445端口,在2个电脑间的任何防火墙里请确保这个端口被打开,包括Windows防火墙。

  • VIA——虚拟接口适配器(Virtual Interface Adapter:VIA)是两个系统间高性能通讯的协议,它需要在终端和专门连接口都要有特制硬件。

与命名管道(Named Pipes)一样,使用VIA协议首先需要在为SQL Server配置管理器(SQL Server Configuration Manager)使它生效,然后创建一个使用虚拟接口适配器(Virtual Interface Adapter:VIA)作为协议连接到服务器的SQL Server别名.虽然SQL Server 2012还支持VIA协议,从以后的版本开始它会被移除,因为新安装时需要避免这个协议被安装。

不管使用哪种协议,一旦连接被建立,SQL Server网络接口(SNI)在服务器上与表格数据流(TDS)终结点(下面会介绍)创建一个完全连接,用它来发送请求和接收数据。这里追随透过它生命周期的查询的目的是,你发送SELECT语句且在等待接收结果集。

表格数据流终结点(Tabular Data Stream(TDS) Endpoints)

TDS是微软所有最先由Sybase设计用来与数据库服务器交互的协议。使用例如TCP/IP的网络协议一旦连接被接通,与相关TDS终结点的联系会被创建,它在客户端与服务器端之间担当着通信点。

每个网络协议都有一个TDS终结点,并且还有一个会被专用网络连接(dedicated administrator connection:DAC)使用。一旦连通性被创建,TDS消息会被用做客户端与服务器端间的沟通。

SELECT语句是穿过TCP/IP协议(TCP/IP是默认协议)作为TDS消息发送给SQL Server。

协议层(Protocal Layer)

当SQL Server中的协议层(Protocal Layer)收到你的TDS包,它会倒转SQL Server网络接口(SNI)的工作,把包拆开找出里面包含的请求是什么。协议层(Protocal Layer)同样对把结果和状态消息打包并作为TDS消息发回给客户端负责。

我们的SELECT语句在TDS包里标记为”SQL命令“类型的消息,因为它传给下一个组件,命令分析器(Command Parser),开始走向执行的道路。

上图显示了我们的查询现在到哪里了。在客户端,语句被SQL Server网络接口(SNI)打包在TDS包里并发送给SQL Server中的协议层(Protocal Layer),在那里被拆包,识别为SQL命令,这个代码被SQL Server网络接口(SNI)发送给命令解析器(Command Parser)。

命令分析器(Command Parser)

命令分析器(Comamnd Parser)的角色是处理T-SQL语言事件(language events)。它首先检查语法并通过协议层(protocol layer)返回给客户端任何语法错误。如果语法是有效的,然后下一步就是生成查询计划(query plan)或查找已存在的计划。查询计划(query plan)包含SQL Server将如何去执行这段代码的细节。它通常被称为执行计划(execution plan)。

为了检查查询计划(query plan),命令分析器(Comamnd Parser)会生成T-SQL的散列(hash)并核对计划缓存(plan cache)来决定是否有合适的计划已经存在。计划缓存(plan cache)是在缓冲池(buffer pool)里用来缓存查询计划(query plan)的区域。如果找到匹配的,从缓存里这个计划会被读取并传给查询执行器(Query Executor)去执行。(下一篇将介绍如果没有找到匹配会发生什么。)

参考文章:

http://mscerts.wmlcloud.com/sql_server/SQL%20Server%202012%20%20%20SQL%20Server%20Architecture%20-%20THE%20LIFE%20CYCLE%20OF%20A%20QUERY%20(part%201).aspx

SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第1部分)的更多相关文章

  1. SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第2部分)

    计划缓存(Plan Cache) 如果SQL Server已经找到一个好的方式去执行一段代码时,应该把它作为随后的请求重用,因为生成执行计划是耗费时间且资源密集的,这样做是有有意义的. 如果没找到被缓 ...

  2. SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第3部分)(完结)

    一个简单的更新查询 现在应该知道只读取数据的查询生命周期,下一步来认定当你需要更新数据时会发生什么.这个部分通过看一个简单的UPDATE查询,修改刚才例子里读取的数据,来回答. 庆幸的是,直到存取方法 ...

  3. SQLSERVER 免费对比数据库结构和数据的工具支持:SQL Server 2012, SQL Server 2008 and SQL Server 2005

    New xSQL Schema Compare - version 5 Compare the schemas of two SQL Server databases, review differen ...

  4. [oldboy-django][2深入django]django一个请求的生命周期 + WSGI + 中间件

    1 WSGI # WSGI(是一套协议,很多东西比如wsgiref, uwsgiref遵循这一套协议) - django系统本质 别人的socket(wsgiref或者uwsgiref) + djan ...

  5. (四)一个bug的生命周期

    Bug的属性 Bug重现环境 这个应该是我们重现BUG的一个前提,如果没有这个前提,我们可能会无法重现问题,或者根本就无从下手. • 操作系统 这个是一般软件运行的一大前提,基本上所有的软件都依赖于操 ...

  6. SQL Server 2012 - SQL查询

    执行计划显示SQL执行的开销 工具→ SQL Server Profiler : SQL Server 分析器,监视系统调用的SQL Server查询 Top查询 -- Top Percent 选择百 ...

  7. windows server 2012 + sql server 2008 r2安装

    windows server 2012 r2  里面安装 sql server 2008 r2 问题总结 前提是 windows server 2012 r2 已经安装完成  ,(仅仅是安装完成 啥服 ...

  8. JVM学习笔记:JVM的体系结构与JVM的生命周期

    1 JVM在java平台中的位置 1.1 Java平台组成 Java平台主要由Java虚拟机和Java API这两部分组成.参考Oracle官网. 1.2 java平台结构图 JDK1.2开始,迫于J ...

  9. JAVA虚拟机体系结构JAVA虚拟机的生命周期

    一个运行时的Java虚拟机实例的天职是:负责运行一个java程序.当启动一个Java程序时,一个虚拟机实例也就诞生了.当该程序关闭退出,这个虚拟机实例也就随之消亡.如果同一台计算机上同时运行三个Jav ...

随机推荐

  1. RTTI的实现(vc)--转载

    RTTI (Run Time Type info) 这个神奇的东西用于存储类的相关信息,用于在运行时识别类对象的信息.C++ 里面只记录的类的名字和类的继承关系链.使得编译成二进制的代码,对象可以知道 ...

  2. iptables不生效解决办法

    修改完iptables之后,如果不生效,需要修改一下这个参数 echo 1 > /proc/sys/net/ipv4/ip_forward   使iptables转发开启生效,如果设置为0,则不 ...

  3. WPF与winform与silverlight的区别

    收到了一封学生的邮件: =========================== 金老师您好: 最近在学C#.NET,基本语法学习的差不多了,接下来准备学习图形界面设计部分.但是我目前对于.NET的Wi ...

  4. Asp.net MVC应用在IIS7上部署后403错误解决方案

    1.检查服务器上是否安装了“HTTP重定向”功能和“静态内容压缩”功能(在添加/删除程序或增加角色处安装) 2.应用程序池要被配置为“集成” 3.如果IIS在.Net Framework之后安装的,需 ...

  5. asp.net中TreeView的大数据加载速度优化

    由于数据量太大,加载树时间很长,所以进行了优化 前台 .aspx <asp:Panel ID="Panel2" runat="server" Height ...

  6. phpStorm无法使用svn1.8的解决办法

    1.安装SVN的Command Lines Tools. 2.在phpStorm的SVN属性中,将Use Command Line Client填入:C:\Program Files\Tortoise ...

  7. iOS客户端的在线安装和更新——针对ADHoc证书

    这篇文章纯给自己留个备份,所以对AdHoc证书内部分发和对iOS客户端开发不了解的请直接无视. 一般在iOS游戏或应用开发过程中,正式发布到App Store之前,都需要内部的测试,客户端的安装是个不 ...

  8. 8个经典HTML5 3D动画赏析

    HTML5技术已经越来越被我们所接受,特别是一些3D的动画特效.本文介绍的8个HTML5 3D动画并没有特别华丽的界面,但是比较实用,涉及到3D图片.3D图表.3D按钮等方面,一起来看看. 1.HTM ...

  9. 理解RxJava:(一)基础知识

    理解RxJava:(一)基础知识 本文翻译自Grokking RxJava, Part 1: The Basics,著作权归原作者danlew所有.译文由JohnTsai翻译.转载请注明出处,并保留此 ...

  10. ODBC连接问题

    http://zhidao.baidu.com/link?url=EPEMTuGC1q5wWavZigWseoHOwRLvpHyAVsdIgMLspErJOUZMEepIICUnT9IdkPQlYTm ...