2013年1月28日 星期一

出現大量Network I/O等待

        之前有啟用SQL 2008R2的資料蒐集,也安裝SQL Server® 2012 Performance Dashboard Reports,一直想說有了這些好看的報表可以幫我看到什麼?今早就看到了奇怪的東西了,伺服器統計表的SQLServer等候出現大量的Network I/O等待,如下表,點進去發現是ASYNC_NETWORK_IO的比例最高



        我遇到類似的例子是我在遠端使用Profiler,在SQLServer等候也會看到大量的Network I/O,印象中那時點進去看OLEDB的比例最高,是有點不一樣的

        接著進入查詢統計資料紀錄,選依持續時間排名,如下圖,發現有兩個QUERY有問題

        反正已經發現奇怪的Query了,接著我去看SQL Server® 2012 Performance Dashboard ReportsCurrent Waiting Request有兩個Network I/O等待,如下圖,通常看不到代表是好的狀態

        點進去一看一樣是剛剛那兩個奇怪的QUERY,如下圖


        那兩個奇怪的QUERY一看內容很正常啊,一個有Where,一個沒有Where,對不同的資料庫下的查詢,Table筆數才數萬筆而已,沒有很多,相同的地方Client端是同一款應用程式,問題為何會出現ASYNC_NETWORK_IO,通常是前端應用程式無法快速的處理來自後端的送來的資料,通常程式是那種一次只處理一筆,這筆處理完再處理下一筆的這種,如果應用程式效能不夠好就容易出現這種問題囉,解決方法就是限制回傳的資料筆數,可用TOP(n)來限制最簡單,通常應用程式如果無法用分頁處理,一頁要顯示數萬筆資料其實沒什好處的

        不過目前這兩個QUERY就卡在那邊,我猜想應該是USER等不下去直接關掉應用程式,結果QUERY就還留著,直接先kill掉就OK



2 則留言:

  1. 我的情況跟你很像,每天有許多ASYNC_NETWORK_IO Processes,不過當User關機以後就全部不見了,不用主動把它Kill掉...=口="

    回覆刪除
    回覆
    1. 我們的User都不關機的...
      因為回家後還要能VPN回自己電腦...

      刪除