【发布时间】:2012-02-02 03:44:38
【问题描述】:
这可能是一个愚蠢的问题,但我想知道每 15 分钟从我的数据库中删除所有过期的“会话”是否是个好主意?
还是直接放在那里?会话在 X 分钟后过期,它不再有用了,好像只是占用空间?
【问题讨论】:
标签: c# sql-server session
这可能是一个愚蠢的问题,但我想知道每 15 分钟从我的数据库中删除所有过期的“会话”是否是个好主意?
还是直接放在那里?会话在 X 分钟后过期,它不再有用了,好像只是占用空间?
【问题讨论】:
标签: c# sql-server session
如果你的桌子是这样的
SessionId datatype,
SessionLastTouch datetime
然后在注册新会话时,在写入(会话问题或触摸)表后进行一些清理,如下所示:
delete from YourSessionsRegister WHERE SessionLastTouch < DATEADD(min, -15, GETDATE())
但是
可能更好的方法是根据一些时间表清理会话寄存器 - 以减少高峰时段的数据库负载 - 只需创建作业,它每晚或某事清理寄存器。像这样
【讨论】:
当我的团队在 .NET 应用程序中部署 SQL Server 会话状态时,我们只需使用 SQL Server 代理创建一个作业,以每晚(或以某个适当的时间间隔)清理过期的会话。
除非您有大量流量,否则您可以在方便的时候执行此操作,而不必担心会立即删除未使用的会话,但清理干净绝对是个好主意。
【讨论】:
如果您使用标准 SQL Server 会话状态,则会自动为您删除旧会话。在删除旧条目之前,会话不会过期,因为提供者不会主动监控会话表中的 Expires 列。
安装/配置实用程序创建一个 SQL 代理作业,该作业每 60 秒调用一次DeleteExpiredSessions 存储过程。这意味着需要运行 SQL 代理才能使会话到期工作并清理表。
【讨论】: