2010-09-26 43 views
5

我的asp.net應用程序遇到性能問題。有時需要客戶端30-40秒來執行一個命令,有時需要3-4秒。我試過SQL Profiler,但沒有看到任何問題。在客戶嘗試的情況下,我無法在我身邊複製這個問題。ASP.NET會話性能

我在想,它可能會與我使用的會話變量有關。我正在使用它們中的很多來在頁面內傳遞信息。但是我不清楚它們。

如果我清楚他們會幫助嗎?如果是這樣會影響其他用戶嗎?還是隻爲該用戶清楚?

任何幫助表示讚賞。

+0

當發生這種情況時,您能否向我們提供有關服務器負載的更多信息,包括cpu使用情況和內存使用情況?當請求突然開始超過30秒時,我通常會查找資源死鎖或超時。 – sisve 2010-09-26 15:13:12

+2

這些類型的問題真的很難回答。什麼是硬件?多少個Web服務器用戶?每個用戶的會話中究竟有多少數據(你能量化「他們中的很多」)?多少個SQL服務器用戶?平臺/硬件/網絡吞吐量和大約一百萬其他因素(糟糕的代碼,糟糕的體系結構,一天中的時間,負載平衡,緩存等等)的差異會影響性能。環境如何? – 2010-09-26 15:18:23

+0

你使用什麼會話狀態模式?即inproc,sqlserver或stateserver?後兩者將使用比前者更多的資源,儘管它們也更有彈性。 – 2010-09-26 15:36:42

回答

0

會話等會話變量是用戶特定的,因此清除它們不會影響其他用戶。

保持你的會話光線肯定會有助於提高性能。

0

建議在正常操作過程中,ASP.NET會話不會影響您的SQL Server往返時間。假設什麼都沒有被存儲在與你的數據層相關的會話中(即靜態SqlConnection對象)

如果你看到那些很長的時間(30-40秒),試着確定性能是否是一個漸進的放緩, SQL Server往返時間是孢子的。

考慮實施日誌記錄以幫助確定模式。開始寫入磁盤,每天/小時一個文件,如果您認爲合適的話。

  • SQL命令的開始時間開始。記錄您傳遞的查詢/數據集/相關信息。
  • SQL命令的結束時間。
 
--- Executing statement SELECT * FROM Customers 
--- Start 08:55.44 
--- End 08:55.45 
=== Roundtrip was 1 second SELECT * FROM Customers 

小時/天/周後,打開日誌,以尋找「往返」,或許寫一個程序來解析這些日誌給你。

1

在基於SQL Server的會話存儲的.NET 2.0實現中的某個存儲過程中存在記錄鎖定問題。它看起來像MS納入.NET 4.0版本中的修復。

到這裏看看: http://sanjevsharma.blogspot.com/2008/03/improving-aspnet-session-state-database.html

我99%肯定可以運行4.0版本aspnet_regsql -ssadd的,而仍運行ASP.NET 2.0反對。我記得做了2.0與4.0 SQL腳本的差異,上面的修復是唯一真正的區別。 MS'修復程序的實施比上面的鏈接稍微好一些(並且明顯基於)。

0

如果問題似乎不是您的數據庫,您可以嘗試分析您的Web應用程序並查看瓶頸位置。很難再現像您在生產中看到的可變問題(4-40秒延遲),但有多少方法調用正在發生以及哪些消耗最多執行時間的結果可能會提供一些提示。

一些在What Are Some Good .NET Profilers?

提到我個人而言我的EQATEC探查的忠實粉絲。

0

如果你在這個尺度上有變化,你很可能會看到某種鎖定或爭用問題。根據時間安排以及配置文件時發生了什麼,如果事實如此,您可能看不到SQL鎖定問題。嘗試監視perfmon中的鎖定度量標準以查看是否存在可疑內容,並且考慮系統中還有哪些內容會導致任何類型的鎖定或延遲等待時間。

0

您是否嘗試啓用ASP.NET跟蹤日誌記錄並查看調用堆棧中的加載時間?我已經使用了這一點來診斷ASP.NET性能瓶頸。如果你不熟悉的trace.axd,您可以通過配置文件

<trace enabled="true" /> 

啓用此配置設置啓用它可以讓你瀏覽你的網站的根目錄下的trace.axd和查看最近10個交易詳細。您可以通過該跟蹤元素啓用更大的結果集,滾動結果集和一堆其他漂亮的跟蹤選項。