1. 程式人生 > >T-SQL執行內幕(6)——返回結果

T-SQL執行內幕(6)——返回結果

本文屬於SQL Server T-SQL執行內幕系列

 



    在執行引擎按照執行計劃的要求把資料成功檢索之後,就需要把資料返回給客戶端。這裡的結果不是單純的資料庫引擎完成查詢資料之後的結果,而是客戶端(如SSMS)接收到資料的結果。一旦資料已經“填滿”執行樹的各個操作符,那麼最頂端的根操作符就會負責把資料寫入網路快取(network buffer)並把這些資料傳送給客戶端。

    結果集並不是直接寫到中間儲存(如記憶體或磁碟)然後傳送到客戶端,而是在建立時(查詢執行時)就傳送返回。不過由於受限於網路協議中的流量控制等制約,如果客戶端沒有積極處理結果(如使用

SqlDataReader.Read()),則網路將限制傳送端(即正在執行的查詢)使其暫停操作,所以有可能一個查詢要執行很久。一旦網路解除限制,查詢將恢復執行然後繼續傳送資料。

    有一個特殊情景,使用了OUTPUT引數,為了返回output的資訊,這個output資訊會寫入到網路資料流中一併返回,但是這個值只會在執行結束後返回,也代表著執行完成。而其他場景是一邊執行一邊傳送。

    另外要再次提醒,結果的傳送同樣需要轉換為TDS格式通過網路協議傳送到客戶端。