2014-10-16 412 views
0

我正在替換用ASP.NET 1.0編寫的遺留Web應用程序。我的計劃是在現有的數據庫模式之上使用MVC5重建一個新的GUI。作爲該過程的一部分,我將整個數據庫從SQL-Server 2000遷移到SQL-Server 2014,並在新的數據庫服務器上指向相同的Web實例。爲什麼DataAdapter.Fill()與SQL-Server-2014相比要慢於SQL-Server-2000

儘管對新服務器的查詢運行速度要快得多,但數據庫升級導致我們的網站變慢。我追溯到「DataAdapter.Fill()」調用的緩慢。連接到SQL-Server 2014時,來自Web應用程序的調用需要大約10秒鐘,而不是使用舊數據庫服務器3秒鐘(約慢3倍)。底層存儲是非常快的,所以這不是瓶頸。

新的數據庫服務器位於相同的網絡上,所以延遲不應該成爲問題。 Web服務器可以在不到10毫秒的時間內對舊服務器和數據庫服務器進行ping操作。

任何想法爲什麼數據庫升級會導致如此戲劇性的放緩?

+0

是否有可能您的索引需要重建? – Capellan 2014-10-16 19:31:55

+0

索引不是問題。即使使用「SET ARITHABORT OFF」,底層存儲也足夠快。運行「DBCC DROPCLEANBUFFERS」和「DBCC FREEPROCCACHE」確實加快了sproc,但是sproc並不是瓶頸。 我目前的理論是由於SQL版本之間的不匹配,DataAdapter.Fill()調用較慢。由於我通過.NET 1.0框架進行調用,因此它可能依賴於速度較慢的遺留支持API。我沒有任何證據或專業知識,但這就是我在這裏發佈的原因。 – CowboyBebop 2014-10-17 17:38:19

回答

0

好的,問題解決了。緩慢不是加載DataAdapter,而是在對數據庫的普通調用中。從ADO.NET調用數據庫時,默認關閉ARITHABORT,即使默認情況下SSMS已將其打開。這很難趕上,因爲即使當我試圖通過調用「SET ARITHABORT OFF」來禁用SSMS中的默認ARITHABORT設置時,它也沒有效果(不知道爲什麼)。

我解決了這個問題,將「SET ARITHABORT ON」添加到我的應用程序調用時運行緩慢的sproc的開頭。可以爲整個數據庫啓用此功能,但有一些risks associated with doing that

另外我發現this非常有幫助。

相關問題