归档大量旧数据会锁定我的数据库吗?

时间:2011-07-19 20:51:13

标签: sql-server stored-procedures triggers sql-agent-job

我需要将一个月前的数据日志记录表移动到日志记录存档表,然后从以后删除超过一年的数据

有大量数据(2个月内插入600k)。

我正在考虑每天/每周简单地调用(批处理)存储过程。

我首先考虑做2个存储过程:

  1. 档案中删除超过365天的内容
  2. 将数据从日志记录移动到存档,超过30天(我想有一种方法可以通过1 sql查询 >)
  3. 记录中删除超过30天的内容。
  4. 然而,这个解决方案似乎非常缺乏,可能会将数据库锁定几分钟,这是我不想要的。

    那么,我有什么选择吗?它们是什么?

2 个答案:

答案 0 :(得分:3)

这些都不应该锁定您实际使用的表。您目前只写入logging表,仅写入新记录。

您只从logging表中选择OLD记录,并写入除了归档过程之外您不写入的表。

你采取的步骤听起来不错。我会更进一步,而不是根据日期删除,只需在INNER JOIN字段上的归档表格id - 然后您只删除已归档的特定记录。

作为旁注,600k的记录根本不是很大。我们有生产数据库,表格超过20亿行,我知道其他人在这里有dbs,每分钟有数百万个插入到事务表中。

修改

我忘了最初包含,您计划的方法的另一个好处是每个步骤都是隔离的。如果您因任何原因需要停止,您的步骤都不具有破坏性,或取决于立即执行的下一步骤。您可以存档大量记录,然后在第二天或过夜运行删除而不会产生任何问题。

答案 1 :(得分:0)

如果您已归档到辅助数据库,该怎么办?

即:

主数据库具有日志记录表。

辅助数据库具有存档表。

这样,如果您担心锁定存档表以便可以对其进行批处理,则不会关闭主数据库。

但无论如何,我不确定你是否担心锁定 - 我想这取决于你的实施方式。