T-SQL执行内幕(6)——返回结果

本文属于SQL Server T-SQL执行内幕系列

 



    在执行引擎按照执行计划的要求把数据成功检索之后,就需要把数据返回给客户端。这里的结果不是单纯的数据库引擎完成查询数据之后的结果,而是客户端(如SSMS)接收到数据的结果。一旦数据已经“填满”执行树的各个操作符,那么最顶端的根操作符就会负责把数据写入网络缓存(network buffer)并把这些数据发送给客户端。

    结果集并不是直接写到中间存储(如内存或磁盘)然后发送到客户端,而是在创建时(查询执行时)就发送返回。不过由于受限于网络协议中的流量控制等制约,如果客户端没有积极处理结果(如使用SqlDataReader.Read()),则网络将限制发送端(即正在执行的查询)使其暂停操作,所以有可能一个查询要执行很久。一旦网络解除限制,查询将恢复执行然后继续发送数据。

    有一个特殊情景,使用了OUTPUT参数,为了返回output的信息,这个output信息会写入到网络数据流中一并返回,但是这个值只会在执行结束后返回,也代表着执行完成。而其他场景是一边执行一边发送。

    另外要再次提醒,结果的发送同样需要转换为TDS格式通过网络协议发送到客户端。



你可能感兴趣的:(数据库管理,数据库开发,技术内幕,T-SQL,DBA,性能优化,T-SQL注意事项,SQL,Server,DBA)