我们收到硬件团队发来的消息,告诉我们一个数据库就占用了 1.4 TB 的空间。我们查看了它,它有几个表,其中包含数百万条历史数据(触发器出于某种原因每天加载过去 4 年的日志,并且根本不删除数据)。而且它没有索引。
我们想删除旧数据,但我们无法弄清楚如何在不熔化机器的情况下,一个简单的 COUNT 需要 15 分钟,添加索引或尝试做任何大的事情都会失败。
我们现在唯一想到的想法就是创建一个临时表,小批量存储我们想要保存的数据,然后截断旧的。
到目前为止,我们正在尝试此代码的选择部分作为测试。
WITH CTE AS
(
SELECT TOP (1000) *
FROM table
ORDER BY year DESC
)
DELETE FROM CTE
选择值需要更长的时间,因为我们正在查看的数据量预计将在 7 年多的时间内清理表格。
编辑:问题是如何清除无用数据。桌子占用这么多空间是个问题 EDIT2:将术语更改为临时表。为了澄清:创建一个新表来转储我们想要保留的信息。然后稍后删除它。
如果您不关心此存档表中超过 4 年的数据(您的问题中不清楚),那么:
*我不明白的是:
将超过 4 年的任何内容从源表复制到存档表可能会更好,在这种情况下,上面引用的 SQL Server 作业会将超过
X
年的任何内容从源表复制到存档表,并且然后从源表中删除该数据。您还需要确定将数据在存档表中保留多长时间。但您没有在问题中提供这些要求。