(對不起,如果這是一個很長的問題,它說具體)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設置是否會導致問題?
其他我現在忘了的東西。
任何想法,經驗或凡是將不勝感激,幫助我解決這個問題!
您是否試圖連接到舊的SQLExpress數據庫以查看速度是否存在差異?連接到1分貝作爲測試(簡單的SQL的東西)呢? – webdad3 2012-01-10 17:49:01
不幸的是,我們沒有連接到舊實例的選項。一旦我們獲得了新的服務器並開始工作,舊的服務器就被格式化並重新用於其他目的。即使實例依然存在,我們的系統的物理部署也不允許我連接到舊的服務器,而不用在兩端的防火牆中進行分析,也不會有任何問題。 – Caleb 2012-01-10 18:07:24