SQL Server内核

浏览: 1524

了解SQL Server 内部组件是如何运作对学习BI是非常有帮助的,它是BI数据的主要来源。

       一:SQL Server 网络接口(SNI)是一个协议层,负责建立客户端和服务器之间的网络连接。SQL Server支持的协议有: 共享内存、TCP/IP、命名管道 等,这里我讲一下 TCP 协议的三次握手和四次挥手,TCP端口默认1433,UDP端口默认1434

01.png

二:SQL Server 由两个主要引擎组成:关系引擎和存储引擎。

       关系引擎有时称为查询处理器,因为关系引擎的主要功能是进行查询的优化和执行。关系引擎包含三个主要部分,命令解析器、查询优化器和查询执行器。命令解析器用于检查查询命令的语法和生成查询树,查询优化器大概是任何数据库系统中最重要的一部分,查询执行器负责查询命令的执行。

       存储引擎负责管理与数据相关的所有I/O操作,包括访问方法和缓冲区管理器。其中,访问方法负责处理行、索引、页、分配和行版本的I/O请求;缓冲区管理器负责缓冲池的管理,缓冲池是SQL Server 内存的主要使用者。存储引擎还包含了一个事物管理器,负责数据的锁定以实现ACID(原子性、一致性、隔离性、持久性)属性中的隔离性,并负责管理事物日志。

       缓冲池是SQL Server内存最大的使用者。缓冲池中包含了SQL Server 中所有类型的缓存,包括计划缓存和数据缓存。比如当你查询一个关联语句时如果它开机后没有执行过,查询时会消耗一点时间,如果开机后又查询过在去查询速度会很快,它没有去查询数据库文件而是去的内存中缓存下来的数据。

 

三:磁盘上的数据文件和日志文件。

02.png

这里已一个简单的查询(select)和更新(update)的生命周期为例

简单的查询

1.    客户端的SQL Server 网络接口(SNI)通过只用网络协议,例如TCP/IP与SQL Server服务器端的SNI建立了一个连接,然后通过TCP/IP连接和TDS端点创建一个连接,并通过这个连接向SQL Server以TDS消息的形式发送select语句。

2.    SQL Server的SNI将TDS消息解包,读取select语句,然后将这个SQL命令发送给命令解析器。

3.    命令解析器在缓冲池的计划缓存中检查是否已经存在了一条与接收到的语句匹配且可用的查询计划。如果找不到命令解析器则基于select语句生成一个查询树,然后将查询树传递给查询优化器,让它生成查询计划。

4.    由于这条查询命令比较简单,查询优化器仅在预优化阶段就生成了“零开销”的查询计划(或称为“普通”查询计划)。查询优化器将创建出来的查询计划发送给查询执行器执行。

5.    查询执行器在执行查询计划的时候,首先确定完成这个查询计划需要读取什么数据,然后通过OLE DB 接口向存储引擎中的访问方法发送访问请求。

6.    为了完成查询执行器的请求,访问方法需要从数据库中读取一个数据页面,并要求缓冲区管理器提供这个数据页面。

7.    缓冲区管理器在数据缓存中检查这个数据页是否已经存在。由于这个页面并没有在缓存中,因此缓冲区管理器首先从磁盘上获取这个数据页面,然后将其存入缓存,并传回给访问方法。

8.    最后,访问方法将结果集传递给关系引擎,由关系引擎将结果集发送给客户端。

 

简单的更新

       更新与查询的前面步骤是一样的,到了访问方法这一步,事物管理器会将更新操作写入日志管理器中,只有在确定操作已经成功写入了事物日志之后,才能够执行真正的数据修改操作。所以事物日志的性能很关键,一旦访问方法接收到确认信息,就将修改数据的请求发送给缓冲区管理器,由缓冲区管理器完成修改数据的操作。

推荐 1
本文由 FocusBI 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册