2011-10-04 73 views
2

我們有一個Web應用程序,用於在Web場上託管的MVC2 + Linq2SQL + MS SQL SERVER 2008。幾乎像stackoverflow.comWeb場中的ASP.NET MVC2 - 高流量的頁面加載速度很慢

我們有4×IIS7 + 1 SQL Server 2008中負載MS NLB

靜態內容平衡是由外部緩存提供高速緩存 - Akamai的,從而降低了要求的86%。

每個Web服務器都有32 GB的RAM和4個四核CPU,所以前端有64個核心。

我們將會話狀態保存在表中。

它工作正常,中等流量(網頁加載= 0.2秒),但該公司做電視廣告,在這些廣告期間,流量在20-30秒內達到20,000用戶。

在這一刻,頁面放慢到8-10秒。但是,在任何機器上,CPU和內存的使用率甚至不會達到40%。

數據中心的帶寬未達到其極限的一半。

頁面速度慢,僅從1-2個表中的最多10條記錄的簡單SELECT生成數據。

顯然有一個瓶頸在某處,並試圖找出在哪裏。

任何人有任何建議,我在哪裏尋找一個問題?

+1

我猜這些表上的SELECT太多導致這個bottelneck。基於你的WHERE子句,你在這些表上有適當的索引等嗎? – Ankur

+0

我同意Ankur。聽起來像是在數據庫上執行了過多的查詢。檢查你的索引,ToList(),Any()等的用法。這些都是調用數據庫的函數。你也可以使用像DotTrace這樣的工具來分析你的應用程序,看看會發生什麼。 – Rob

+0

我在所有PK列上都有聚簇索引,並且我已經完成了執行計劃。我不認爲缺乏額外的索引會導致這個瓶頸。這當然有幫助,但我會獲得一小部分。我正在尋找一個巨大的收益。因此,我還考慮了SQL Server的磁盤I/O,並將數據庫分成幾個不同的磁盤,以提高磁盤I/O的併發性。正如它在這裏所說:http://tinyurl.com/6xfxuso –

回答

1

我前段時間發現問題,但沒有時間在這裏發佈。我已經嘗試了幾乎所有我能想到的事情:索引,優化sql,監控磁盤I/O,修改代碼。上述內容沒有解決我的問題。我在我們的局域網上運行2個工作站的網絡壓力測試,我可以在幾秒鐘內凍結整個頁面!運行測試時,我注意到一些奇怪的東西。我創建了一個單獨的控制器進行測試,並提出了兩種方法。都做同樣的事情:要求我們的數據庫服務器相同的數據。

行動A)

public ActionResult Index(){ 
var model = new SomeModel(); 
// Get data 
.... 
return View(model); 
} 

動作B)

public ActionResult Index() { 
var model = new SomeModel(); 
// Get data 
.... 
return View("Index",model); 
} 

在頁面加載的差異:

A)〜297毫秒

B)〜39.47小號

這個o只有在高併發期間纔會出現,否則很好。 似乎MVC2庫中的默認視圖搜索引起的問題,因爲一旦指定它一切正常。

我描述它在我的博客:

http://arturito.net/2011/10/24/asp-net-mvc2-in-the-web-farm-slow-page-load-with-high-traffic-where-is-the-bottleneck/

我已經張貼在asp.net的問題跟蹤器在CodePlex上,但沒有人曾這樣評價/迴應它。

http://aspnet.codeplex.com/workitem/9396