SQL Server 2005的四层

SQL Server 2005由协议层、关系引擎、存储引擎以及SQL OS四层组成。

协议层主要负责接收和传送SQL Server服务器端和客户端之间的消息,同是也要负责将这些消息转换成下一层可以理解的格式。

关系引擎也可以被称为查询处理器,主要负责接收SQL批处理请求,并且决定如何执行批处理中的命令,一般都包括了分析、编译以及优化T-SQL语句,可能还包括批处理执行监控。

存储引擎负责所有的数据访问,包括基于事务的命令语句、数据块操作(例如备份、Bulk Insert以及某些DBCC命令)。

SQL OS负责处理那些与底层操作系统任务相关的事情,例如线程调度、同步机制、死锁检测、内存及缓存管理。

SQL Server 2005提供了一种新的工具帮助用户了解这四层的工作状态——动态管理视图和动态管理函数:

  • dm_exec_*:通常都提供与用户代码执行以及相关链接的信息。
  • dm_os_*:提供较为底层的系统信息,例如内存、锁以及调度等。
  • dm_tran_*:提供当前事务的相关信息。
  • dm_io_*:提供与网络和磁盘输入输出相关的统计信息。
  • dm_db_*:提供数据库及数据库对象的相关信息。
协议层

应用程序客户端与SQL Server服务器通讯时,由协议层负责建立正确的应用层连接,并对通讯数据包进行封装和解封装。SQL Server通讯用的应用层数据单元格式是Tabular Data Stream(表式数据流)。SQL Server支持的通讯协议有:

  • 共享内存:这种协议仅适用于本机连接,因此通常都用于其它协议连接故障的时候进行本地排错使用。MDAC 2.8或更早版本的客户端不能使用这一协议,而只能使用命名管道。
  • 命名管道:这种协议是在两个进程间共用一个内存区域进行数据交换,因此一个进程的输出就成为另外一个进程的输入,这种协议支持本地访问和网络访问。
  • TCP/IP:这是最常用的协议了。
  • 虚拟接口适配器(VIA):这一协议用于VIA体系的硬件。

SQL Server 2005推出了一个新的连接概念,那就是TDS端点(TDS Endpoint)。在安装过程中,SQL Server就会为每一种协议建立一个TDS Endpoint,因此就是四个TDS端点,不过这四个端点中只有共享内存默认是启用的,另外三个端点需要手动启动。特别需要指出的是,启用TCP/IP协议断点的时候,还要选择启用哪些Socket地址,因为TCP/IP协议地址启动后,所有Socket地址其实还没有启用,这是很多朋友常问的一个问题。

关系引擎(查询处理器)

 SQL Server的关系引擎也被称为查询处理器,它的主要作用是理解我们提交的T-SQL语句并确定如何执行。关系引擎由一些列的组件组成,其中有一些组件可以说是整个SQL Server中最为复杂的组件。关系引擎中常见的组件包括:

  • 命令分析器(Command Parse):分析器检查我们提交的命令语法格式是否正确,然后将这些命令翻译成内部格式——查询树。
  • 查询优化器(Query Optimizer):优化器接收查询树,对查询树进行标准化,然后根据SQL Server以及命令相关对象的内部信息决定如何执行,最后生成执行计划。
  • SQL管理器(SQL Manager):SQL管理器负责管理存储过程及其执行计划(比如说是否要有编译执行计划、需要重编译或可以复用现有的计划),同时SQL管理器也负责对即席T-SQL查询进行参数化。
  • 数据库管理器(Database Manager):数据库管理器负责为查询编译及优化模块访问数据库的元数据。
  • 查询执行器(Query Executor):执行器负责执行计划的运行,因为通常T-SQL命令都会需要与存储引擎进行交互,例如修改或访问数据、管理事务一致性以及锁管理。
存储引擎

存储引擎的主要任务管理数据访问,但是SQL Server把一部分组件划分到了SQL OS层。据《Inside SQL Server 2005: Storage Engine》一书的作者说,在微软SQL Server存储引擎小组主要负责三部分内容:Access Methods、Transaction Management以及SQL OS。

  • 访问方法管理器(Access Methods Managers):访问方法管理器负责选择合适的代码定位数据,扫描数据页和索引页,准备OLEDB行集并将行集返回给关系引擎。SQL Server 2005包括的访问方法有:
    • 行操作(Row Operations)负责对单行数据操作(获取或修改一行数据某一列的值)
    • 索引操作(Index Operations)则负责维护和访问B树结构的索引数据
    • 页分配(Page Allocations)负责跟踪和维护8种类型磁盘页(数据页、LOB页、索引页、PFS页、GAM页、SGAM页、IAM页、BCM页和DCM页)
    • SQL Server 2005新增的版本操作(Version Operations),支持SQL Server 2005维护数据的老版本,SQL Server 2005种的版本功能用于支持快照隔离、在线索引操作。
  • 缓存管理器(Buffer Manager):数据访问管理器的访问方法代码虽然管理数据页面的访问访问,但是它们却不会实际接触数据页面,所有数据页面的访问管理是由缓存管理器管理的。缓存管理器负责确定那些数据页面需要调入缓存(缓存管理器使用一个特殊的时钟算法机制来管理缓存页面的老化),而哪些可以需要被写入数据磁盘(Flush Disk)。
  • 事务服务(Transaction Services):事务服务负责确定本地事务之间的顺序和嵌套关系,当需要分布式事务的时候负责与MS-DTC服务交互。SQL Server 2005为了确保事务的一致性支持两种并发控制模型:乐观并发控制(基于数据版本)和悲观并发控制(基于数据锁)。SQL Server 2005有5种事务隔离级别,其中未提交读、可重复读和串行读仅支持悲观并发控制,新的快照隔离仅支持乐观并发控制,而默认的提交读则同时支持悲观并发控制和乐观并发控制。
  • 锁管理器(Lock Manager):锁管理器为应用代码获取和管理各种类型的锁,例如用于读的共享锁、用于修改的排他锁、用于潜在访问的意向锁、用于分配磁盘空间的扩展锁、用于维护元数据的架构锁。尽管SQL Server 2005支持新的快照隔离级别,但是在这种隔离级别下面仍然需要锁机制,因为快照隔离仅仅能够保证读进程和写进程互相不影响,但为了确保数据的一致性仍然需要在两个或更多的写进程之间使用锁来确保数据一致性。
SQL OS

SQL OS负责管理与操作系统交互的一系列操作,例如内存管理、线程调度、同步管理、磁盘IO等。

  • 用户模式调度(User Mode Scheduler UMS):用户模式调度主要负责SQL Server作业间的处理器资源调度,从SQL Server 7.0开始可以使用纤程(Fiber,在Windows NT 4.0被发布的一项技术,用于提供线程中各细粒度的资源分割,主要针对SQL Server和Exchange Server之类的高并发系统的调度)。SQL Server中将调度程序称为用户模式调度(UMS)的原因是这一调度程序主要运行在用户模式中。SQL Server 2005中的调度被称为SQL Server操作系统(SQL Server Operating System——SOS)调度,比UMS要更为先进。
    • SQL Server调度程序(Schedulers):在SQL Server服务启动时会为每个CPU创建一个对应的调度程序,然后根据SQL Server的处理器亲和度掩码选项值(Affinity Mask)设置对应调度程序的状态为联机(ONLINE)或脱机(OFFLINE)。对于某些特殊的环境,用户的服务器有比较多的CPU以及多个实例(比如16颗CPU和4个实例),我们可以通过亲和度掩码将每个实例绑定到指定的4颗CPU(实例1为15,实例2为240,实例3为3840,实例4为170000,这四个掩码的二进制分别是0000000000001111,0000000011110000,0000111100000000和1111000000000000)。这样设置后不仅每个实例都绑定到了指定的4颗CPU,同时每个实例中的调度程序也被绑定到了4颗CPU的某一颗CPU,如果用户仅仅需要绑定实例到CPU,但是不希望实例内的调度程序也绑定到CPU上,则可以设置SQL Server的启动跟踪标记8002。
    • SQL Server工作程序(Workers):一个工作程序实际上就是与某个调度程序绑定的线程或纤程,工作程序在某个调度程序接受到处理请求的时候被创建,因此如果调度程序通过处理器亲和度选项与实际的物理处理器进行了绑定,那么工作程序在创建后实际上也是和物理处理器绑定的。(这就是我们说为什么通过设置处理器亲和度可以提高处理器的缓存命中率)
    • SQL Server作业(Tasks):可以等同理解SQL Server作业为一个SQL Server的批(Batch)。SQL Server收到一个请求时会将该请求分配到某个SQL Server工作程序上,在完成分配的请求前这一工作程序将不能处理其他请求(比如说被分配的请求需要等待一个IO的完成确认,或者需要等待一个排他锁的释放等等)。
Advertisements
Post a comment or leave a trackback: Trackback URL.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: