巨大的“網路 I/O”類型資源等待
我們有一個在 WinDev 中開發的內部應用程序,它使用在 Windows Server 2008R2 上執行的 Microsoft SQL Server 2012 SP2(內部版本 11.0.5058)數據庫。
我們遇到了性能問題。同時,Activity Monitor 顯示大量“網路 I/O”類型的等待,在這種情況下,“巨大”是指執行時間少於 6 天的伺服器的累積等待時間為 700 萬秒:
網路連接本身很好,伺服器連接到 10G,而客戶端是連接到 1Gb 的物理桌面或具有 10G 的遠端桌面伺服器。網路監控顯示沒有鏈路飽和,也沒有任何其他網路問題。CPU、RAM 和磁碟 I/O 也很好。
從我讀到的關於網路 I/O 等待的內容來看,它與查詢返回的記錄有關,這些記錄不被客戶端使用。所以我傾向於認為問題出在應用程序中,但我很難讓開發人員對此進行調查(不是他們不願意這樣做,而是他們很忙,而且似乎他們對根目錄一無所知原因及解決方法)
所以問題:
- 我是否認為性能問題與那些網路 I/O 等待有關?
- 我可以向開發團隊提供什麼線索來幫助他們確定原因?
- 除了修復應用程序之外,我是否可以對 SQL Server 本身進行一些微調以緩解該問題?
- 停止使用活動監視器
- 使用sp_WhoIsActive找出實際發生的情況
它可能是備份,在這種情況下,你可以做的事情並不涉及硬體升級(也許 1 Gb iSCSI 並不是一個好主意……)
它可能是消耗數據 RBAR 的客戶端程式碼(想想每一行進入的 foreach 循環),或者一次請求很多行(這是分頁查詢可以提供幫助的地方)。
它可能完全是另一回事!
要了解您的伺服器等待最多的是什麼,請訪問firstresponderkit.org - 全面披露,我為這個開源項目做出了貢獻 - 並抓取
sp_BlitzFirst
(或者,哎呀,全部抓取)。您可以執行此命令來查看自啟動以來的整體等待統計資訊。
EXEC sp_BlitzFirst @SinceStartup = 1
或者這是在減速期間獲取等待統計資訊的樣本。
EXEC sp_BlitzFirst @Seconds = 30, @ExpertMode = 1
希望這可以幫助!