這可能是一個愚蠢的問題,但我想知道從數據庫中刪除所有過期的「會話」是否是一個好主意,每15分鐘一次?數據庫過期後從數據庫中刪除會話?
還是把它留在那裏?會議在X分鐘後過期,不再有用了,似乎只是佔用空間?
這可能是一個愚蠢的問題,但我想知道從數據庫中刪除所有過期的「會話」是否是一個好主意,每15分鐘一次?數據庫過期後從數據庫中刪除會話?
還是把它留在那裏?會議在X分鐘後過期,不再有用了,似乎只是佔用空間?
當我的團隊在.NET應用程序中部署SQL Server會話狀態時,我們只需使用SQL Server代理創建一個作業,以每晚(或以適當的時間間隔)清理過期的會話。
除非您擁有大量流量,否則只要方便而不用擔心即時刪除未使用的會話,您可以在不使用會話的情況下執行此操作,但清理它絕對是一個好主意。
如果您的表看起來像
SessionId datatype,
SessionLastTouch datetime
再註冊新的會話時做一些清理寫作(會話問題或觸摸)表後,像這樣:
delete from YourSessionsRegister WHERE SessionLastTouch < DATEADD(min, -15, GETDATE())
BUT
可能更好的方法是根據某個時間表清理會話記錄 - 減少高峯時段的數據庫負載 - sim創造這份工作,每晚或每晚清理登記冊。像這樣
如果您使用的是標準SQL Server會話狀態,則會自動刪除舊會話。在刪除舊條目之前,會話不會過期,因爲提供程序不會主動監視會話表中的Expires列。
安裝/配置實用程序創建一個SQL代理作業,每60秒調用一次DeleteExpiredSessions
存儲過程。這意味着需要運行SQL代理以使會話過期運行並清理表。
Hi @RickNZ。這是一種可怕的行爲,我們剛剛在系統中注意到這一點,它很痛苦!您是否知道任何修復或替代SQL提供程序以更爲期望的方式運行,而不是依賴從數據庫中物理刪除會話條目? – 2013-05-16 09:25:59
我不知道任何開源替代SQL提供程序。這不是標準提供商的唯一問題,所以我經常爲大型項目提出的建議是編寫自己的替代提供商。我自己做過;所涉及的努力程度並不像您想象的那麼大,並且性能提升可能很大。 – RickNZ 2013-05-16 12:39:29
謝謝!葉可能是最好的清理非高峯期。 Btw在記錄被刪除時數據庫是否縮小? – 001 2012-01-04 10:27:19
如果數據庫性能對您很重要,則應避免在生產數據庫上運行DBCC SHRINKFILE。縮小數據庫文件意味着當它們再次增長時,這些文件不是連續的,這增加了磁盤搜索。此外,增長文件的過程相當昂貴。 – RickNZ 2013-05-16 12:42:20