小编Jac*_*rys的帖子

从具有非常少量扩展空间的表中删除行

我有多个表备份了数据,现在暂时删除旧数据,由于空间限制,目前无法选择存档。我试过运行以下命令:

WHILE 1 = 1 
BEGIN 
    DELETE TOP ( 4000 )
    FROM    [OLD_TABLE] WITH (TABLOCKX)
    WHERE   [Date] < '2014-01-01 00:00:00'
    IF @@ROWCOUNT = 0 
        BREAK    
END
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但非常缓慢……比如 17 多个小时,并且只删除了约 140,000 行。

这里的关键是这张表,其他需要减少的表非常大,大约有 50-6000 万行,大约有 16-17 GB 的空间。物理磁盘上只剩下 20 GB 的空间。我已经考虑将我想要保留的数据放在中间表中,截断和重新填充,但我担心在这些操作完成时我们会用完磁盘上的空间。这是一个生产数据库。我继承了这个烂摊子,我正在尝试清理它并试图清理这个数据库,这样我们就可以保持功能,直到我们可以安装新硬件。

是否有任何我(数据库管理的相对新手)没有遇到过的方法可以让我以更快、更有效的方式执行此操作?

*表名和列名已匿名。

编辑

查询执行计划

sql-server-2005 sql-server delete transaction-log

3
推荐指数
1
解决办法
147
查看次数