ASP.NET 4.0 和 ASP.NET 2.0 在使用 SQL Server 來儲存 session 狀態資料時,使用的 table schema 是一樣的,主要的差別在於這個 SQL Server 預儲程序:DeleteExpiredSessions。此預儲程序的用途是刪除過期的 sessions,它會由 SQL Server Agent 定期執行,預設的執行頻率為一分鐘一次。
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 的資料量比較大,啟用此壓縮功能對於提升網站的反應速度應該會有一些幫助(因為可減少網路傳輸的時間)。
有關如何使用 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 的資料量比較大,啟用此壓縮功能對於提升網站的反應速度應該會有一些幫助(因為可減少網路傳輸的時間)。
沒有留言: