删除Azure SQL表中的大数据将增加数据库数据存储

时间:2019-04-07 09:09:40

标签: azure-sql-database azure-storage

我正在尝试使用delete命令从Azure SQL表中删除大数据,但是当删除数据时,数据库数据存储将增加。我该如何阻止它,或者Azure中是否有任何选项可以最大限度地减少事务日志?

我不想使用truncate,因为我不需要删除表中的所有数据。

 delete top(10000)
 from Crumbs
 where CrumbId <= @maxId and 
       TenantId =@tenantId

3 个答案:

答案 0 :(得分:0)

通常,您会将数据库的恢复模式更改为SIMPLE。

对于Azure Sql数据库来说有点不同: 在这种情况下,SQL数据库引擎每5-10分钟执行一次事务日志备份-它也会自动缩小。

如果要完全控制数据库实例,则可以选择运行SQL Server托管实例或安装了SQL Server的VM。

答案 1 :(得分:0)

请参考此博客:How to delete large data of table in SQL without log?

如果您不想使用截断,M.Ali会为您提供另一个选择:

  1. 将数据库的恢复模式更改为SIMPLE。
  2. 使用while循环以较小的批次删除行。

示例:

def str_widowed(s, n):
    for i in range(len(s) - n + 1):
        yield s[i:i+n]

也许您可以尝试此选项。

希望这会有所帮助。

答案 2 :(得分:0)

根据表和要删除的记录,您有一些选择:

  • 您要保留与删除数据的比例是多少?如果您要删除的数据多于想要保留的数据,请考虑将数据保存到新表中并删除旧表。
  • 如果表已分区,则可以基于分区应用上述方法,并根据需要切换进/出分区。
  • 您的数据库大小由日志和数据文件组成,如果删除不连续的数据块,索引将被碎片化,因此之间将损失很多空间(页面拆分等) )。完成删除操作后,对索引进行重建或重新组织以清理此空间。
  • 重建/重组后,请使用DBCC SHRINKDATABASE强制清理日志和预先分配的数据空间。请注意,由于db和日志文件需要再次增长,因此重启负载可能会对性能造成轻微影响。