2012-01-04 132 views
2

这可能是一个愚蠢的问题,但我想知道从数据库中删除所有过期的“会话”是否是一个好主意,每15分钟一次?数据库过期后从数据库中删除会话?

还是把它留在那里?会议在X分钟后过期,不再有用了,似乎只是占用空间?

回答

2

当我的团队在.NET应用程序中部署SQL Server会话状态时,我们只需使用SQL Server代理创建一个作业,以每晚(或以适当的时间间隔)清理过期的会话。

除非您拥有大量流量,否则只要方便而不用担心即时删除未使用的会话,您可以在不使用会话的情况下执行此操作,但清理它绝对是一个好主意。

+0

谢谢!叶可能是最好的清理非高峰期。 Btw在记录被删除时数据库是否缩小? – 001 2012-01-04 10:27:19

+1

如果数据库性能对您很重要,则应避免在生产数据库上运行DBCC SHRINKFILE。缩小数据库文件意味着当它们再次增长时,这些文件不是连续的,这增加了磁盘搜索。此外,增长文件的过程相当昂贵。 – RickNZ 2013-05-16 12:42:20

0

如果您的表看起来像

SessionId datatype, 
SessionLastTouch datetime 

再注册新的会话时做一些清理写作(会话问题或触摸)表后,像这样:

delete from YourSessionsRegister WHERE SessionLastTouch < DATEADD(min, -15, GETDATE()) 

BUT

可能更好的方法是根据某个时间表清理会话记录 - 减少高峰时段的数据库负载 - sim创造这份工作,每晚或每晚清理登记册。像这样

1

如果您使用的是标准SQL Server会话状态,则会自动删除旧会话。在删除旧条目之前,会话不会过期,因为提供程序不会主动监视会话表中的Expires列。

安装/配置实用程序创建一个SQL代理作业,每60秒调用一次DeleteExpiredSessions存储过程。这意味着需要运行SQL代理以使会话过期运行并清理表。

+0

Hi @RickNZ。这是一种可怕的行为,我们刚刚在系统中注意到这一点,它很痛苦!您是否知道任何修复或替代SQL提供程序以更为期望的方式运行,而不是依赖从数据库中物理删除会话条目? – 2013-05-16 09:25:59

+0

我不知道任何开源替代SQL提供程序。这不是标准提供商的唯一问题,所以我经常为大型项目提出的建议是编写自己的替代提供商。我自己做过;所涉及的努力程度并不像您想象的那么大,并且性能提升可能很大。 – RickNZ 2013-05-16 12:39:29