SQL Server 2005架构

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

转载自: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,如需转载请自行联系原作者




相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
2月前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
4月前
|
SQL 分布式计算 Hadoop
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
134 3
|
4月前
|
SQL 存储 分布式计算
大数据-93 Spark 集群 Spark SQL 概述 基本概念 SparkSQL对比 架构 抽象
大数据-93 Spark 集群 Spark SQL 概述 基本概念 SparkSQL对比 架构 抽象
70 0
|
5月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
6月前
|
Kubernetes Serverless API
Kubernetes 的架构问题之利用不可变性来最小化对API Server的访问如何解决
Kubernetes 的架构问题之利用不可变性来最小化对API Server的访问如何解决
104 7
|
7月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
179 13
|
7月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
107 9
|
7月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
93 6
|
7月前
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
581 1
|
7月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
548 3

热门文章

最新文章