如何从 Azure 数据库中删除数百万行?

How to delete millions of rows from an Azure database?

我现在面临的问题是我必须从 Azure Microsoft SQL 数据库中删除超过 9000 万行,我不能简单地删除 table 并重建一个新的。

这就是我使用的代码

DECLARE @NRO INT = 0; 
WHILE 1 = 1
BEGIN
    SET @NRO = @NRO + 1; 
    PRINT CONCAT(@NRO * 2000, ' ROWS DELETED.')

    DELETE TOP(2000)
    FROM AuditDetail
    WHERE Id < 25000000;

    IF @@ROWCOUNT < 2000 
        BREAK;
END

我试过使用Azure Runbook完成作业,但它只能让我运行 SQL 脚本9小时,即使我将超时时间设置为超过24小时。

我的问题:如何将 Runbook 正确设置为 运行 脚本,只要我愿意,还是有其他方法来完成这项工作?我试过使用检查点,但没有用,我可能做错了:(

谢谢。

考虑到您的限制,您走在正确的轨道上。

我还建议您在监控 Azure SQL 指标 blade 中的相关指标的同时调整批处理大小。如果您一次 2k 条记录的批处理大小甚至没有对 CPU 或内存造成影响,请考虑停止查询并增加批处理大小。

您也可以考虑根据您的 SKU 扩大规模。如果您使用的是 vCore 或超大规模 SKU,您将能够通过扩展内核数量来加快速度,然后在所有删除操作完成后缩小它们。

如果您真的 risk-adverse,还需要考虑一件事,没有法律障碍,而且您有足够的预算这样做。您可以创建 prod 数据库的副本以进行试验。就像连接到主数据库并执行“创建数据库 X 作为 Y 的副本”一样简单。这样做不会影响数据库的性能。然后你可以在这个prod副本上做实验。