SQL Server 2005架构-阿里云开发者社区

开发者社区> 技术小甜> 正文

SQL Server 2005架构

简介:
+关注继续查看

转载自:http://blog.csdn.net/motian_shi/article/details/4071616


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的完成确认,或者需要等待一个排他锁的 释放等等)。


相关文章

SQL Server 2012架构:http://www.go4expert.com/articles/sql-server-2012-architecture-t34067/

















本文转自UltraSQL51CTO博客,原文链接: http://blog.51cto.com/ultrasql/1792473,如需转载请自行联系原作者




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
25986 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
2659 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
10303 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
9676 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
11354 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
8216 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
6721 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
21059 0
+关注
10146
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载