Sql-Server

為什麼使用本地數據庫文件對本地實例進行查詢會導致 NETWORK_IO 等待?

  • November 20, 2018

我已按照本教程使用擴展事件獲取特定查詢的等待統計資訊,而它正在“飛行中”。雖然本教程提到了索引重建,但我只是從單個表中執行了一個 select 語句

等待(使用教程中的查詢)是

Wait Type            Wait Count  Wait Time  Resource Wait Time  Signal Wait Time
-------------------  ----------  ---------  ------------------  ----------------
NETWORK_IO                  693        778                 776                 2
SOS_SCHEDULER_YIELD           6          0                   0                 0

我在安裝實例的同一個盒子上執行 SSMS 中的查詢(.連接時用作我的伺服器名稱)數據庫的數據文件位於盒子的 C:/ 驅動器上,所以我很困惑為什麼NETWORK_IO會顯示?

作為進一步的測試,我禁用了盒子上的網路適配器並發現了相同的結果(顯然數字略有不同)

我認為NETWORK_IO與 SQL Server 將結果返回給 SSMS 有關的想法是否正確?

通常這表現為ASYNC_NETWORK_IO擴展事件之外,但是是的,這是 SQL Server 等待呼叫者(在本例中為 SSMS)消耗結果所花費的時間。如果呼叫者很慢(如 SSMS),那麼 SQL Server 必須坐在那裡等待,然後再提供更多行。如果您有一個廣泛的結果集或較大的值,您應該將結果與網格進行比較,並將結果與文本進行比較。但實際上,您不應該根據 SSMS 中的響應時間來計時任何事情,因為它對數據做了不切實際的事情,以及它如何呈現您的應用程序不會做的事情(希望如此)。

我在這裡寫過這種等待類型(以及其他 9 種常見的等待類型):

引用自:https://dba.stackexchange.com/questions/222895