ASP.NET 4.0 使用 SQL Server 儲存 session 資料的改進

ASP.NET 4.0 和 ASP.NET 2.0 在使用 SQL Server 來儲存 session 狀態資料時,使用的 table schema 是一樣的,主要的差別在於這個 SQL Server 預儲程序:DeleteExpiredSessions。此預儲程序的用途是刪除過期的 sessions,它會由 SQL Server Agent 定期執行,預設的執行頻率為一分鐘一次。

有關如何使用 SQL Server 來儲存 ASP.NET session 資料,可參考 MSDN 文件〈sessionState 項目〉的「使用 SQLServer 模式」一節的說明。

ASP.NET 2.0 時代所建立的 DeleteExpiredSessions 預儲程序有個不太容易發現的瑕疵:當網站有大量使用者湧入時,可能會造成 DeleteExpiredSessions 預儲程序在執行時發生 deadlock 的情形,因而影響 ASP.NET 網站的執行效能。至於造成 deadlock 的原因,可參考這篇文章:Deadlock when storing Asp.net sessions in SQL server during peak load

這個預儲程序在 ASP.NET 4.0 已經改進,不會再有 deadlock 的問題,但如果你的 ASP.NET 2.0 網站是使用 SQL Server 來儲存 session 資料,最好還是依這篇官方文件修正原有的預儲程序:Improved DeleteExpiredSessions stored procedure in ASP.NET 2.0

ASP.NET 4.0 在儲存 session 方面的另一個改進,是支援壓縮 session 資料。如果 session 的資料量比較大,啟用此壓縮功能對於提升網站的反應速度應該會有一些幫助(因為可減少網路傳輸的時間)。

Post Comments

技術提供:Blogger.