Azure sql database 删除azure SQL表中的大数据将增加数据库数据存储
我试图使用delete命令从Azure SQL表中删除大数据,但删除数据时,数据库数据存储将增加。我如何才能停止这一点,或者Azure中是否有任何选项可以最小化事务日志 我不想使用truncate,因为我不需要删除表中的所有数据Azure sql database 删除azure SQL表中的大数据将增加数据库数据存储,azure-sql-database,azure-storage,Azure Sql Database,Azure Storage,我试图使用delete命令从Azure SQL表中删除大数据,但删除数据时,数据库数据存储将增加。我如何才能停止这一点,或者Azure中是否有任何选项可以最小化事务日志 我不想使用truncate,因为我不需要删除表中的所有数据 delete top(10000) from Crumbs where CrumbId <= @maxId and TenantId =@tenantId 删除顶部(10000) 面包屑 其中CrumbId通常您会将数据库的恢复模式更改为S
delete top(10000)
from Crumbs
where CrumbId <= @maxId and
TenantId =@tenantId
删除顶部(10000)
面包屑
其中CrumbId通常您会将数据库的恢复模式更改为SIMPLE
Azure Sql数据库有点不同:
在这种情况下,SQL数据库引擎每5-10分钟执行一次事务日志备份—它也会自动收缩
如果希望完全控制数据库实例,可以选择运行SQL Server管理的实例或安装了SQL Server的VM。通常,您会将数据库的恢复模式更改为“简单”
Azure Sql数据库有点不同:
在这种情况下,SQL数据库引擎每5-10分钟执行一次事务日志备份—它也会自动收缩
如果您希望完全控制数据库实例,可以选择运行SQL Server托管实例或安装了SQL Server的VM。请参阅此博客:
如果您不想使用truncate,M.Ali会为您提供另一个选项:
将数据库的恢复模式更改为“简单”
使用while循环删除较小批次中的行
例如:
DECLARE @Deleted_Rows INT;
SET @Deleted_Rows = 1;
WHILE (@Deleted_Rows > 0)
BEGIN
-- Delete some small number of rows at a time
DELETE TOP (10000) Crumbs
WHERE CrumbId < <= @maxId and
TenantId =@tenantId
SET @Deleted_Rows = @@ROWCOUNT;
END
声明@Deleted\u行INT;
设置@Deleted_Rows=1;
而(@Deleted_Rows>0)
开始
--一次删除少量行
删除顶部(10000)个碎屑
其中CrumbId<请参考此博客:
如果您不想使用truncate,M.Ali会为您提供另一个选项:
将数据库的恢复模式更改为“简单”
使用while循环删除较小批次中的行
例如:
DECLARE @Deleted_Rows INT;
SET @Deleted_Rows = 1;
WHILE (@Deleted_Rows > 0)
BEGIN
-- Delete some small number of rows at a time
DELETE TOP (10000) Crumbs
WHERE CrumbId < <= @maxId and
TenantId =@tenantId
SET @Deleted_Rows = @@ROWCOUNT;
END
声明@Deleted\u行INT;
设置@Deleted_Rows=1;
而(@Deleted_Rows>0)
开始
--一次删除少量行
删除顶部(10000)个碎屑
其中CrumbId<根据您的表和要删除的记录,您有几个选项:
- 您希望保留的数据与删除的数据的比例是多少?如果你的意图是删除比你想保留的更多的数据,考虑把数据保存到一个新的表中,然后删除旧的表。
- 如果您的表是分区的,那么您可以在分区的基础上应用上述方法,并根据需要切换分区
- 数据库大小由日志和数据文件组成,如果删除不连续的数据块,索引将被分割,因此在这两者之间会丢失大量空间(页面分割等)。完成删除后,请在索引上运行“重建”或“重新组织”以清理此空间
- 重建/重新组织后,使用强制清理日志和预先分配的数据空间。请注意,由于数据库和日志文件需要再次增长,因此在重新启动负载时可能会受到较小的性能影响
根据您的表和要删除的记录,您有几个选项:
- 您希望保留的数据与删除的数据的比例是多少?如果你的意图是删除比你想保留的更多的数据,考虑把数据保存到一个新的表中,然后删除旧的表。
- 如果您的表是分区的,那么您可以在分区的基础上应用上述方法,并根据需要切换分区
- 数据库大小由日志和数据文件组成,如果删除不连续的数据块,索引将被分割,因此在这两者之间会丢失大量空间(页面分割等)。完成删除后,请在索引上运行“重建”或“重新组织”以清理此空间
- 重建/重新组织后,使用强制清理日志和预先分配的数据空间。请注意,由于数据库和日志文件需要再次增长,因此在重新启动负载时可能会受到较小的性能影响
无法将恢复模式更改为简单,因为它是Azure DB,此代码将增加数据库数据存储。无法将恢复模式更改为简单,因为它是Azure DB,此代码将增加数据库数据存储