Components of the SQL Server Engine SQL Server 主要有四个组件: The relational engine Query processor The storage engine SQLOS Protocol layer (没有出现在下图中) 无论通过哪种客户端工具提交的批处理语句到SQL Server中都要与这四个组件进行交互.

Components of the SQL Server Engine

SQL Server 主要有四个组件:

  • The relational engine – Query processor
  • The storage engine
  • SQLOS
  • Protocol layer (没有出现在下图中)

SQL Server 2008 Internal #003 SQL Server 引擎的协议层 关系引-LMLPHP

无论通过哪种客户端工具提交的批处理语句到SQL Server中都要与这四个组件进行交互.

  • Protocol Layer 协议层将从客户端发送的请求翻译成SQL Server能识别的指令,并且将查询或者错误结果又从SQL Server中翻译成客户端能理解的信息, 就是一种基于某种协议的信息交换.
  • Relational Engine Layer - 关系数据引擎层主要用来处理SQL语句,构建,编译或者调优并执行.
  • Storage Engine - 存储引擎 主要是数据存储管理.
  • SQLOS Layer - 主要是与操作系统交互, 因为这里面涉及到线程的管理,同步,死锁,内存管理等方面,还有缓冲池.

Observing Engine Behavior

SQL Server 2008 包含了一套系统对象可以允许开发者或者管理员深入的了解SQL Server内部信息. 这些对象就是动态管理对象 Dynamic Management Objects,它们包含各种各样的视图和函数, 但是大多数都是视图, 所有我们也叫它们动态管理视图 Dynamic Management Views. DMVs 在SQL Server 2008的每一个数据库中都存在,但是它们并不是真正存在于磁盘上的表,它们只是基于SQL Server内部的一些结构.

从这些对象中可以获取在多个会话,事务或者用户请求的过程中服务器端状态的变化信息,这样就可以使用这些对象来作一些诊断,内存以及处理器的调优或者在所有的会话中监控一些内容.

可以对它们作一些简单的分类:

  • dm_exec_* 包含了一些间接或者直接关联到用户语句执行的信息.
  • dm_os_* 包含了一些低级别的信息,比如像内存,所,计划等等.
  • dm_tran_* 和事务相关的信息
  • dm_io_* 网络和磁盘上IO活动的信息
  • dm_db_* 包含了有关数据库和数据库对象的相关信息,比如索引的信息

Protocols 协议

SQL Server 服务器可以同时支持来自于不同客户端的不同的协议,每一个客户端都只使用一种协议与SQL Server交互. 如果客户端程序不知道 SQL Server正在监听哪一种协议,那么你可以尝试依次使用不同的协议与服务器连接,目前有如下这些协议可供使用:

  • Shared Memory - 共享内存协议. 不需要配置, 但是客户端和服务器端必须在同一台机器上.
  • Named Pipes - 命名管道协议. 一种为本地局域网开发的协议 LANs, 在一个进程中使用了一部分内存将信息传递到另外的一个进程, 所以一个进程的输出就是另外一个进程的输入,另外的一个进程可以是本地的也可以是远程的.
  • TCP/IP – TCP/IP 协议在互联网上用的最多.不同网络中不同的硬件或者操作系统等等都可以基于TCP/IP协议进行通信.在 SQL Server 中使用TCP/IP协议需要配置相当多的内容,但是目前大多数网络中的机器都已经进行过适当的配置了.
  • Virtual Interface Adapter(VIA) 一种基于VIA硬件的协议,比较特别,跟机器中硬件有关.

Tabular Data Stream Endpoints

SQL Server 2008 也允许你创建 TDS端点, 这样SQL Server监听器就可以监听额外的TCP端口.在配置的时候, SQL Server 会自动为上面的四种协议都创建端点,如果协议启用了,那么用户就可以访问.如果协议禁用了,那么即使端点存在但用户也不能访问.

The Relational Engine

前面已经提到关系引擎也被叫做 Query processor 查询处理器,因为在这里面SQL Server将决定你的查询语句将最终如何被执行.有两个非常重要的组件, 一个是Query Optimization 查询优化器, 一个是 Query Execution 查询执行器. 在整个查询处理器中或者在整个数据产品中 Query Optimizer 是最为复杂的一个组件,它决定了是哪种执行计划将被执行,中间的过程也比较复杂.

关系引擎同时也是一个承上启下的组件,因为它要管理从存储引擎返回的查询数据并且处理这些返回的结果.而关系引擎存储引擎是通过OLE DB row sets 联系在一起的.

关于关系引擎中的Command Parser, Query Optimizer, Query Executor 等概念和细节请参考我的另一篇 随笔笔记

http://www.cnblogs.com/biwork/archive/2013/04/11/3015655.html

The Storage Engine

存储引擎包括所有参入到数据的访问和管理的所有组件,在SQL Server 2008中,存储引擎主要是由3部分内容组成的: Access methods, locking and transaction services 和 utility commands.

Access methods

当SQL Server需要定位数据的时候,它就调用了Access methods的代码,这些代码就会组建和访问扫描数据页和索引页并且准备 OLE DB row sets来返回到关系引擎.

同样的,当数据被插入时,access methods 就能从客户端收到 OLE DB row set.

Access methods code 包含了打开表,抽取合适数据,更新数据等组件. Access methods code 并不是真正去抽取页,它发送请求到缓冲管理器,由缓冲管理器最终将页的数据读取到缓存中或者从磁盘上将数据读取到缓存中. 当扫描开始的时候, 有一个 look-ahead 这样的机制取得页上行或者索引的入口,被检索的行一旦满足被检索的条件就被称为是有效的检索.Access method 不仅仅是为 SELECT语句服务, 对于其它的符合条件的 UPADATE,DELETE等操作都有效,比如说带了WHERE条件的语句它也起作用,还有就是为那些有需要修改索引入口的一些修改操作.

Access method的分类:

  • Row and Index Operations
  • Page Allocation Operations
  • Versioning Operations

查看更多 SQL Server Internal 笔记 - Microsoft SQL Server 2008 Internals 读书笔记

09-13 19:49