我需要将一个月前的数据从日志记录表移动到日志记录存档表,然后从以后删除超过一年的数据。
有大量数据(2个月内插入600k)。
我正在考虑每天/每周简单地调用(批处理)存储过程。
我首先考虑做2个存储过程:
然而,这个解决方案似乎非常缺乏,可能会将数据库锁定几分钟,这是我不想要的。
那么,我有什么选择吗?它们是什么?
答案 0 :(得分:3)
这些都不应该锁定您实际使用的表。您目前只写入logging
表,仅写入新记录。
您只从logging
表中选择OLD记录,并写入除了归档过程之外您不写入的表。
你采取的步骤听起来不错。我会更进一步,而不是根据日期删除,只需在INNER JOIN
字段上的归档表格id
- 然后您只删除已归档的特定记录。
作为旁注,600k的记录根本不是很大。我们有生产数据库,表格超过20亿行,我知道其他人在这里有dbs,每分钟有数百万个插入到事务表中。
修改强>
我忘了最初包含,您计划的方法的另一个好处是每个步骤都是隔离的。如果您因任何原因需要停止,您的步骤都不具有破坏性,或取决于立即执行的下一步骤。您可以存档大量记录,然后在第二天或过夜运行删除而不会产生任何问题。
答案 1 :(得分:0)
如果您已归档到辅助数据库,该怎么办?
即:
主数据库具有日志记录表。
辅助数据库具有存档表。
这样,如果您担心锁定存档表以便可以对其进行批处理,则不会关闭主数据库。
但无论如何,我不确定你是否担心锁定 - 我想这取决于你的实施方式。