2012-01-10 41 views
15

(對不起,如果這是一個很長的問題,它說具體)ASP.NET 2.0-4.0 Web應用程序遇到極慢的初始啓動。

我工作的公司有一些網站,已經運行一段時間沒有問題。這些應用程序混合使用ASP.NET 2.0,3.5和4.0,全部使用ADO.NET連接到所有使用IIS7託管的SQL Server Standard實例(在同一個Web服務器上)。

當我們轉移到升級的網絡服務器時,問題就開始了。我們盡一切努力,用完全相同的設置來設置服務器,數據庫實例和IIS(除了不同的機器名稱,以及我們已經從SQLExpress升級到標準的事實),並且據我們所知,我們做了。兩臺服務器都運行Windows Server 2008 R2(應用了所有當前更新),並收到了默認安裝。

啓動其中一個應用程序時,問題非常明顯。當您到達我們應用程序的登錄頁面時,頁面本身載入速度非常快。即使當您從不可能緩存頁面的新計算機加載頁面並禁用IIS緩存時,情況也是如此。當您輸入登錄信息並單擊登錄按鈕時,問題實際上可見。由於我們數據庫的設計(不是很好),登錄過程必須訪問多個數據庫,理論上可達150個獨立的數據庫,但實際上通常是2.即使只打開2個數據庫(最低限度)也會出現問題。不是一個偉大的設計,但我們現在必須忍受它。

當試圖初次打開到數據庫的連接時,無論您是連接到2 dbs還是40,整個過程每次停止約20秒。我已經運行了.NET Profiler(jetbrains dottrace)該過程以及我可以從中獲得的唯一信息是,對sqlconnection.open()的調用中的一個或全部佔用了90%的時間。這隻發生在首次使用該應用程序時,但問題更復雜的是IIS忽略了我們爲它設置的回收設置,並在閒置幾分鐘後回收應用程序,導致問題再次出現。

我也嘗試使用SQL Server分析器來查看哪些數據庫操作是放緩的原因,但由於所有其他數據庫活動(以及我必須在生產服務器上執行此操作的事實,因爲這個問題在我們的測試環境中不會發生)我無法確定導致停機的確切操作。我會嘗試在深夜進來並關閉生產站點以運行SQL分析器,但我可能無法立即執行此操作。

在研究問題的過程中,我已經嘗試了幾個解決方案

  • 思考它可能是一個名稱解析問題,我想modifiying兩個主機web服務器上的文件,以及給予的ConnectionStrings一個IP地址而不是要解析的服務器名稱,沒有區別。我聽說LLMNR協議導致這樣的問題,但我認爲試圖通過IP連接或與主機文件解決應該已經消除了這種可能性,我承認我從來沒有試過實際關閉LLMNR。

  • 我增加了IIS中的空閒超時,回收間隔等,但這似乎並沒有得到尊重,更不用說解決問題了。這使我相信有一個設置覆蓋了機器上的IIS應用程序設置。

  • 多個其他代碼修復,其中沒有任何區別。 SqlServer設置是否會導致問題?

  • 其他我現在忘了的東西。

任何想法,經驗或凡是將不勝感激,幫助我解決這個問題!

+0

您是否試圖連接到舊的SQLExpress數據庫以查看速度是否存在差異?連接到1分貝作爲測試(簡單的SQL的東西)呢? – webdad3 2012-01-10 17:49:01

+0

不幸的是,我們沒有連接到舊實例的選項。一旦我們獲得了新的服務器並開始工作,舊的服務器就被格式化並重新用於其他目的。即使實例依然存在,我們的系統的物理部署也不允許我連接到舊的服務器,而不用在兩端的防火牆中進行分析,也不會有任何問題。 – Caleb 2012-01-10 18:07:24

回答

16

如果您仍在本地計算機上運行SQL實例,我會建議使用非tcp連接。 SQL Server支持多種協議,tcp,命名管道和共享內存更爲常見。

命名管道

Data Source=np:computer\instance 

共享內存

Data Source=lpc:computer\instance 

個人我更喜歡共享內存。請記住,您需要啓用這些協議,並且爲了避免配置錯誤,我建議您禁用所有未使用的配置。

看到http://msdn.microsoft.com/en-us/library/ms187892.aspx

IIS重置

在IIS7有配置空閒超時兩種方式。兩者都是通過點擊「應用程序池」部分並右鍵單擊適當的應用程序域來開始的。如果您單擊「回收...」選項,則有一個設置。另一個是在「高級設置...」下的「過程模型」部分,您會發現設置爲零的「空閒超時(分鐘)」會禁用過程超時。這個後面的選項是適合我們的選項。

如果我是你,我會首先解決這個問題,因爲重新啓動appdomain和/或工作進程總是很痛苦,即使你沒有20秒的延遲。

1

一些想法:

  • 從Web服務器,您可以ping數據庫服務器,並獲得「正常」 響應,或者你也看到了類似的延遲?
  • 如果您看到延遲,請運行tracert以查看是否可以確定緩慢發生的位置
  • 嘗試使用類似於QueryExpress(http://www.albahari.com/queryexpress.aspx)的工具,不需要安裝即可運行。您可以下載此EXE並從您的Web服務器運行它。看看你是否可以使用這個連接到你的數據庫,並以正常的方式運行查詢。
  • 嘗試類似SysInternals的TcpView(http://technet.microsoft.com/en-us/sysinternals/bb897437)來查看您的打開連接並查看您的服務器上發生了什麼活動以及有多少數據被髮送到您的數據庫服務器並從中接收。

只是基於你的問題描述,我會開始看什麼的一些初步想法。我希望這有幫助。祝你好運!

+0

實際上,Web服務器和數據庫服務器是一樣的。 Atm我們正在運行IIS並連接到同一臺計算機上的SQLServer實例,因此在提供頁面之前不應該涉及網絡流量。 (有內部交通本地隔離網絡,該機架反正)我都嘗試你的其他建議,無論如何,IIS以外運行的程​​序可以連接沒有問題,有沒有inital運行的TCP連接的與衆不同,相比到一個正常運轉的「熱身」運行。 – Caleb 2012-01-10 18:57:46

0

由於IIS不尊重回收設置:是否重新啓動IIS /重新啓動更改行爲?

+0

多次,即使重新啓動並冷啓動服務器本身,也沒有變化。 – Caleb 2012-01-10 18:53:14

+1

您提到SQL Server和IIS位於同一個框中。 WMI /資源監控是否顯示任何異常?機器配置文件/網站配置文件有什麼不尋常的(IIS7和ASP.NET比IIS6更耦合)? – Leon 2012-01-10 20:39:50

相關問題