Sql-Server
為什麼會出現 async_network_io 等待類型?
上週我們的數據庫發生了一些奇怪的事情。突然之間,應用程序阻止了我們無法保存新實體等的使用者。查看 SQL Server 的活動監視器(2008 兼容模式 2005)後,我看到以下三個條目:
一段時間後,使用者出現連接超時。當我殺死程序64時,他們可以再次正常保存。
問題是他們在塊期間嘗試保存的實體被多次插入數據庫(最多 3 次),即使有程式碼可以防止這種情況發生(數字列必須是唯一的但沒有約束…檢查發生在程式碼中)。
我們使用實體框架 6.0。
- 你們有誰知道這些 ASYNC_NETWORK_IO 等待類型發生的原因和時間以及如何避免它們?
- 它們到底是什麼意思?
ASYNC_NETWORK_IO
以某種方式表明客戶端應用程序處理結果的速度不如 SQL Server 提供的速度。這可能是由客戶端應用程序或伺服器與客戶端應用程序之間的網路連接問題引起的。ASYNC_NETWORK_IO 等待表示兩種情況之一正在發生。第一種情況是會話(即 SPID)正在等待客戶端應用程序處理結果集並向 SQL Server 發送回信號,表明它已準備好處理更多數據。二是可能存在網路性能問題。
您可能已經知道,ASYNC_NETWORK_IO(見於 SQL 2005)和 NETWORKIO(見於 SQL 2000)等待類型與呼叫應用程序相關聯,該應用程序處理來自 SQL Server 的結果不夠快,或與網路性能問題相關.
由於您使用
entity framework
的是 Brent Ozar 的這篇文章,因此可能也很有用查看這些查詢的等待統計資訊,我發現有很多 ASYNC_NETWORK_IO ——通常超過 1000 毫秒。那也沒有任何意義!一個 CPU 時間如此之少、讀取次數如此之少的查詢怎麼會花這麼長時間才能完成?這不像應用程序要求數百萬行並且不能足夠快地使用結果。