2

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

有很多数据(2个月插入600k)。

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

我首先想到做 2 个存储过程:

  1. 档案中删除超过 365 天的内容
  2. 将数据从日志记录移动到存档,超过 30 天(我想有一种方法可以通过 1 个 sql 查询来做到这一点
  3. 从记录中删除超过 30 天的内容。

但是,这个解决方案似乎效率很低,并且可能会锁定数据库几分钟,这是我不想要的。

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

4

2 回答 2

3

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

您正在从logging表中仅选择 OLD 记录,并写入除存档过程之外您不写入的表。

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

附带说明一下,600k 条记录根本不是很大。我们的生产数据库拥有超过 20 亿行的表,我知道这里的其他一些人拥有每分钟数百万次插入事务表的数据库。

编辑:

我最初忘记包括在内,您计划的方法的另一个好处是每个步骤都是独立的。如果您出于任何原因需要停止,则您的任何步骤都不会造成破坏或取决于立即执行的下一步。您可能会归档大量记录,然后在第二天或一夜之间运行删除,而不会产生任何问题。

于 2011-07-19T20:54:14.287 回答
0

如果您归档到辅助数据库会怎样。

IE:

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

辅助数据库有存档表。

这样,如果您担心锁定存档表以便对其进行批处理,它不会使您的主数据库停机。

但无论如何,我不确定你是否需要担心锁定——我想这取决于你如何实现。

于 2011-07-19T20:59:48.720 回答