热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLServer2008Internal#003SQLServer引擎的协议层关系引

ComponentsoftheSQLServerEngineSQLServer主要有四个组件:TherelationalengineQ

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 (没有出现在下图中)

SQLServer2008Internal#003SQLServer引擎的协议层关系引 - 文章图片

无论通过哪种客户端工具提交的批处理语句到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 读书笔记


推荐阅读
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
author-avatar
罗丹灬_853
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有