每10分钟删除一次记录的有效方法

时间:2011-03-02 16:33:36

标签: sql-server sql-server-2008 scheduled-tasks

手头的问题

需要每10分钟从SQL Server数据库表中删除几千条记录。这是旧记录清理的一部分。

正在考虑的解决方案

  1. .Net服务正在运行其他一些功能。相同的服务可以与计时器一起使用,以在db。上执行SQL删除命令。
  2. SQL服务器作业
  3. 触发
  4. 提供解决方案的关键考虑因素

    1. 我们的网络产品部署在不同的客户位置。我们希望最小的运营开销,因为部署的资源技术技能非常有限,我们也希望确保我们的产品对配置的要求很少。
    2. 性能非常重要,因为它在实时交易数据库中。

3 个答案:

答案 0 :(得分:5)

这听起来就像SQL Server作业旨在提供的那种工作;数据库维护。

计划作业可以执行基本的T-SQL语句,该语句将删除您不想要的记录,无论您希望它运行在何种计划上。可以将作业创建脚本化为标准部署脚本的一部分,这可以抵消部署成本。

此外,通过利用SQL Server的既定部分,您可以利用其他数据库管理员的知识来理解SQL作业并能够管理它们。

答案 1 :(得分:0)

我不会使用触发器......并坚持使用SQL Server DTS或SSIS。显然你需要某种标识符,所以我会使用带索引的timestamp列...如果不需要,只需每晚触发一次TRUNCATE。

答案 2 :(得分:0)

删除的效率来自索引,与定时器的触发无关。通过范围扫描可以轻松识别“旧”记录,这一点非常重要。如果DELETE必须扫描整个表以查找这些“旧”记录,它将阻止所有其他活动。通常在这种情况下,表首先按日期时间值进行聚类,如果需要,将唯一主键委托给非聚集索引。

现在如何弹出计时器,你真的有三种选择:

SQL代理作业是10分钟间隔的最佳选择。唯一的缺点是它不适用于SQL Express部署。如果这是一个问题,那么会话计时器和activated procedures是一个可行的选择。

最后一个选项的缺点是必须运行应用程序以使计时器触发删除。如果这不是一个问题(即,如果应用程序没有运行,那么记录没有被删除并不重要)那么就可以了。请注意,ASP.Net应用程序对于这样的计时器是非常糟糕的主机,因为IIS和ASP可能选择回收并放入应用程序池中。