基本select语句的生命周期
(1) 客户端sqlserver网络接口通过一种网络协议(可以是共享内存:简单高速,客户端和sql server在同一台计算机默认连接方式;TCP/IP:访问sql server最常用的一种协议,客户端指定ip地址和端口号连接到sql server;命名管道:命名管道和TCP/IP协议在体系结构上是类似的,是为局域网设计的,在广域网中速度会慢一些;VIA:虚拟接口适配器,是一种可以让两个系统进行高性能通信的协议,要求通信两端使用特殊的硬件和专门连接)和服务的的SNI建立了一个连接,然后通过网络协议连接和TDS端口创建一个连接,并且通过这个连接想sqlserver以TDS消息的形式发送select语句。
(2)sql server的SNI将TDS消息解包,读取select语句,然后将这个sql命令发送到命令解析器。
(3)命令解析器在缓冲池的计划缓存中检查是否已经存在了一条与接收到的语句匹配且可用的查询计划,如果找不到,命令解析器则基于select语句生成一个查询树,然后将查询树传递给查询优化器,让其生成查询计划。
(4)由于这条查询命令非常简单,查询优化器只是在预优化阶段就生成了“零开销”的查询计划(即“普通查询计划”),查询优化器将创建出来的查询计划发送给查询执行器执行。
(5)查询执行器在执行查询计划的时候,首先确定完成这个查询计划需要读取什么数据,然后通过OLE DB接口向存储引擎中的访问方法发送访问数据请求。
(6)为了完成查询执行器的请求,访问方法需要从数据库中读取一个数据页面,并要求缓冲区管理器提供这个数据页面。
(7)缓冲区管理器在数据缓存中检查这个数据页面是否存在,如果这个页面在数据缓存中不存在,缓冲区管理器首先从磁盘上获取这个数据页面,然后将它存入缓存,并传回给访问方法。
(8)最后,访问方法将结果集传递给关系引擎,由关系引擎将结果集发送给客户端。