过期后从数据库中删除会话?

时间:2012-01-04 07:36:22

标签: c# sql-server session

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

或者只是留在那里?会话在X分钟后到期,它不再有用了,好像只占用了空间?

3 个答案:

答案 0 :(得分:2)

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

除非你有大量的流量,否则只要方便就可以做到这一点,而不必担心立即删除未使用的会话,但清理它绝对是一个好主意。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

如果你的表看起来那样

SessionId datatype,
SessionLastTouch datetime

然后在注册新会话后,在写入(会话问题或触摸)到表后进行一些清理,如下所示:

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

<强> BUT

可能更好的方法是根据一些时间表清理会话寄存器 - 在高峰时段减少数据库负载 - 只需创建工作,每晚清理寄存器或smth。像这样