2010-07-01 109 views
4

在高峯期,我們的Web應用程序出現性能問題,當前它在一個2003 IIS6 Web服務器和一個SQL Server 2005數據庫服務器之間分開。數據庫服務器上的查詢時間看起來很好(大約30ms),CPU很低(低於20%),但查詢可能需要很長時間才能在Web服務器上執行(超過1秒)。SQL Server 2005網絡IO等待時間(ASYNC_NETWORK_IO等待類型)問題

我在perfmon尋找線索,並看到平均網絡IO等待時間爲〜400ms,這可以很好地解釋性能差異。我還在SSMS內部運行了一些查詢,並且看到每秒都有大約10,000毫秒的累積ASYNC_NETWORK_IO等待類型。

從一些研究中,似乎問題是網絡容量不足,或者Web服務器沒有足夠快地處理結果。我該如何去調查它是什麼,然後解決?

我們使用NHibernate作爲我們的數據層,所以根據我所知沒有使用DataReader。沒有已知的查詢會返回大型結果集,儘管有一個表具有包含壓縮XML文檔的列。

在此先感謝

附加請求信息

  • SQL Server設置爲使用TCP/IP 和共享內存協議
  • 我們做每個頁面,沒什麼大約4 DB請求荒謬的
  • 在高峯時間DB服務器發送1.5MB /秒
  • 在峯值時,Web s erver CPU大約60%
  • AT峯值,Web服務器NIC負載爲13MB /秒。 8MB正在發送,5MB正在接收。同樣的NIC處理SQL和HTTP流量
  • 我們確實使用了一些緩存,但應用程序是非常動態的,所以需要多達大部分時間
+0

在perfmon中,您是否有一張數字表示網卡當前正在通過的秒數? – Andrew 2010-07-01 22:21:14

+0

當前網絡接口\發送的字節數/秒爲〜560,000,儘管我們目前沒有處於高峯時間,網絡IO等待時間爲0ms。這是我應該檢查的perfmon stat嗎?我將在明天更新問題,並提供發生問題時的高峯時段的統計數據。 – 2010-07-01 22:33:05

+0

字節/秒足以顯示每秒半兆,這不是任何想象中的高數字。 – Andrew 2010-07-01 22:39:52

回答

1

我們通過將SQL通信分離到不同的NIC來解決了問題。此外,此NIC連接到本地IP地址,而在它打到數據庫服務器的公共IP之前。

感謝@Remus Rusanu的提示。

5

數據庫引擎等待的ASP過程中要消耗的日期數據數據包發送給它。這可以在ASP.Net進程本身(IP數據包從NIC中出隊,但它們不被進程佔用,在這種情況下,ASP.Net主機可能是罪魁禍首,因爲在壞代碼或CPU中過載),也可能是主機操作系統無法足夠快地使用IP數據包(來自組合HTTP負載的IP負載和主機的SQL往返負載太多)。

你在ASP主機上的CPU負載是什麼?什麼是網卡中斷率? HTTP流量是否與TDS(SQL)流量在同一個網卡上共享,如果是,您可以將它們分離到不同的NIC上嗎?

ASP客戶端和SQL之間配置了什麼協議?網管或TCP?如果是Net Pipes,你可以關閉它並強制它使用TCP,這樣你可以讓SMB脫離等式?

根據HTTP請求,你要做多少次往返數據庫的訪問?如果超過4個,您是否可以考慮重構代碼以將其減少到每個請求3-5次往返行程?

您是否在ASP進程上緩存任何內容以避免額外往返數據庫?

+0

感謝您的非常有幫助的答案。一旦我們達到峯值使用率,我會用額外的信息修改這個問題。 – 2010-07-02 10:45:47

+0

任何想法如何找出網卡中斷率? – 2010-07-02 11:19:57

+0

您可以使用kernrate http://www.microsoft.com/whdc/archive/drvperf.mspx#EPH或ETW會話 – 2010-07-02 17:27:48