现在的位置: 首页 > 综合 > 正文

数据库上层组件

2012年08月06日 ⁄ 综合 ⁄ 共 1097字 ⁄ 字号 评论关闭

看过inside SQLSERVER2005 T-SQL查询这本书的人都知道T-SQL的逻辑执行顺序,我写这篇文章的目的就是让做数据库优化工作的朋友了解SQLSERVER上层组件如何处理T-SQL语句。

数据库处理组件分查询引擎和存储引擎。

1、网络协议层,这一层很少有朋友去了解他们,它分4种协议,这四种协议大家在安装SQLSERVER实例后,可以在配置管理器中看到:

(1)内存共享协议(shared memory),这个大家在安装实例时,默认打开,同时也是SQLSERVER指定的默认管道。

(2)命名管道(Named Pipes),这个是实例用于局域网通信,可以通过服务器别名连接数据库。

(3)TCP/IP,这个是最常用的,大家使用SSMS连接数据库时,使用IP连接数据库,通常连接服务器时,默认是1433端口(除非你改了端口号),另外,服务器如果有多个实例,那么连接时,除非连接默认实例,否则都要使用IP\实例名。

(4)VIA,虚拟局域网络,这个需要专用通道。

2、TDS层,这也是一个协议,表单数据包协议,负责发送请求和接受数据。它会建立与服务器端的连接,并将T-SQL命令封装为TDS数据包发送给服务器端。

3、oledb协议层,这个会执行与TDS层相反的事情,先把TDS包解包并解释成T-SQL语句传递给数据库引擎。到这里,T-SQL语句的传递就执行完成了。

4、查询编译器,这个会处理T-SQL语句,如果语句语法有问题,会返回给oledb层错误信息。

5、查询分析器,接受查询编译器传递过来的查询语句,去缓冲区搜索查询计划缓存,如果有,就直接将计划传递给查询执行器,如果没有就会生成一个查询计划树,这个树的每个节点都是一个T-sql执行步骤。生成查询计划候传递给查询执行器。

6、查询执行器,执行查询,它会访问访问方法层。

7、访问方法层,这是一个接口层,提供访问数据的接口。

8、缓存层,包括计划缓存+数据缓存,访问方法在访问数据时,会先去数据缓存区获取数据,如果数据缓存中没有数据,会先从硬盘读取数据到数据缓存区,然后再返回给查询执行器。可以说,SQLSERVER的所有数据操作都是在内存区处理的。PS:当数据缓存内存区没有存在查询的数据时,会从硬盘读取数据到内存中,这个过程叫硬页错误,这个涉及到内存命中率。

数据查询引擎:查询编译器,查询分析器,查询执行器。

存储引擎:访问方法,缓存层。

大家在做数据库优化,通常都是1、T-sql语句优化,2、索引优化,3、表分区,4、分表分库,5、读写分离,6、硬件优化。我写这篇文章,就是希望大家了解了这些东西后,去分析可以从哪些方面去优化数据库,视野更开阔一些。

抱歉!评论已关闭.