2009-09-18 67 views
30

我正在學習MS認證,我正在做的一個練習測試有一個問題,爭用的焦點是將會話存儲在SQL Server中的性能爲與StateServer相反。SQLServer vs StateServer for ASP.NET會話狀態性能

鑑於應用程序正在Web場中運行,會話狀態的哪個解決方案會提供最佳性能(SQL Server或StateServer),最重要的是,爲什麼?

+1

有關ASP.net會話狀態的更多詳細信息,看看這裏:> http://msdn.microsoft.com /fr-fr/library/system.web.sessionstate.httpsessionstate%28v=vs.80%29.aspx – 7addan 2013-03-26 10:24:49

回答

53

State Server速度更快,因爲它將會話數據存儲在內存字典中。 SQL Server速度較慢,因爲它存儲在將數據保存到磁盤的數據庫中。

由於越來越多的客戶端訪問/更新會話數據,SQL服務器的速度也會變慢,因爲所有數據都存儲在一個表中,導致爭用。

SQL服務器是更可靠因爲它被持久保存到磁盤並且可以設置爲具有故障轉移功能的羣集。

請參閱this article的序言部分以獲得深入的解釋。

+0

謝謝馬克,非常清楚並且重點回答 – 2009-09-20 21:07:53

11

從這個鏈接:http://www.eggheadcafe.com/articles/20021016.asp

性能

  • 是InProc - 最快的,但更多的會話數據,更多的內存是 消耗的Web服務器上,並且 可能會影響性能。 StateServer - 當存儲基本類型的數據(例如字符串,整數, 等)時,在一個測試環境中,它比InProc慢15% 。但是,如果您要存儲 批次 的對象,則序列化/反序列化的成本 可能會影響性能 。您必須爲自己的 方案執行性能測試。 SQLServer-當存儲基本類型數據(例如字符串,整數, 等)時,在一個測試環境中,它比InProc慢25%,即 。與StateServer中的 序列化相同的警告。

所以它似乎是StateServer的快一點,用於存儲會話狀態的SQL Server。

就我而言,我建議SQL Server更多用途,並可能用於其他方面。不僅如此,存儲機制還在磁盤上,StateServer在單獨的進程中運行,但它只是將數據存儲在另一個進程的內存空間中,而不必將其寫入磁盤(虛擬內存允許)

14

有點但重要的注意事項:InProc在服務器場中不可用,顧名思義,它運行在當前的w3wp進程中,無法在服務器場中共享。 StateServer是一項Windows服務,因此使用StateServer的速度取決於運行狀態服務器的計算機的速度,它只是內存。當然,SQL需要編寫數據並進行檢索,這可能比內存更慢。

here

  • 在過程。進程中執行得最好,因爲會話狀態內存保存在ASP.NET進程中。對於託管在單個服務器上的Web應用程序,確保用戶被重定向到正確服務器的應用程序,或會話狀態數據不重要的應用程序(就其可以重新構建或重新填充而言) ,這是可供選擇的模式。
  • 過程中。當性能很重要時最好使用此模式,但不能保證用戶將從哪個服務器請求應用程序。在進程外模式下,您可以獲得從內存讀取的性能以及管理所有服務器狀態的單獨進程的可靠性。
  • SQL Server。當數據的可靠性對應用程序的穩定性至關重要時,最好使用此模式,因爲數據庫可以針對故障情況進行羣集。性能沒有過程那麼快,但折衷是更高的可靠性水平。
+0

還要記住,SQL Server和進程外包含會話數據的序列化和反序列化,這是一個inproc中額外的性能開銷不會帶來負擔。 – 2017-01-12 07:54:06

+0

除此之外,SQL服務器和進程外通常需要通過網絡發送數據,因此也會涉及網絡通信的開銷,InProc也沒有負擔。 – 2017-01-12 07:56:08