Azure sql database Azure SQL server删除

Azure sql database Azure SQL server删除,azure-sql-database,Azure Sql Database,我有一个SQL server,有16130000行。我需要删除大约20%。当我做一个简单的测试时: delete from items where jobid=12 需要永远 我在11分钟后停止了查询。选择数据非常快为什么删除这么慢?选择850000行大约需要30秒 是因为桌子锁吗?你能做些什么吗?我希望删除行的速度会更快,因为您不在线路上传输数据 Best R,Thomas尝试使用技术来提高性能、最小化日志使用并避免占用数据库空间 declare @batch_size in

我有一个SQL server,有16130000行。我需要删除大约20%。当我做一个简单的测试时:

delete from items where jobid=12
需要永远

我在11分钟后停止了查询。选择数据非常快为什么删除这么慢?选择850000行大约需要30秒

是因为桌子锁吗?你能做些什么吗?我希望删除行的速度会更快,因为您不在线路上传输数据

Best R,Thomas

尝试使用技术来提高性能、最小化日志使用并避免占用数据库空间

declare 
       @batch_size int,
       @del_rowcount int = 1

set @batch_size = 100
set nocount on;

while @del_rowcount > 0
       begin
              begin tran
                     delete top (@batch_size)
                     from dbo.LargeDeleteTest

                     set @del_rowcount = @@rowcount

                     print 'Delete row count: ' + cast(@del_rowcount as nvarchar(32))

              commit tran
       end

删除所有外键,删除行,然后重新创建外键也可以加快速度。

如果不告诉我们您使用的保留大小,就很难给出是否需要Y秒内的X记录的反馈。我可以告诉你这个系统是如何工作的,这样你就可以自己做更多的调查来做出这个决定。日志提交率受您购买的保留大小的限制。从根本上说,删除操作仅限于写出日志记录并将其复制到多台机器上,以防主机死机。当您选择记录时,您不必通过网络访问N台计算机,如果记录保存在内存中,您甚至可能不需要访问本地磁盘,因此,由于需要强化日志,因此选择通常比插入/更新/删除更快

您可以在此处了解不同预订规模的具体限制: 及

客户遇到的一个常见问题是在循环中执行单个操作,如游标或由客户机驱动。这意味着每个语句都更新了一行,因此必须连续强化每个日志记录,因为应用程序在提交下一条语句之前必须等待语句返回。因为您是作为一条语句运行一个大的delete,所以没有达到这个目的。这可能是缓慢的,因为其他原因,例如:

锁定-如果有其他用户在表上执行操作,则可能会阻止delete语句的执行。您可以通过查看sys.dm_exec_请求来查看您的语句是否阻塞了其他锁,从而潜在地看到这一点。 查询计划选择。如果您必须扫描许多行以删除一小部分,则可能会在IO上被阻止以查找它们。查看查询计划形状在这里会有所帮助,设置统计时间也会有所帮助。我建议您将查询更改为TOP 100或类似查询,以了解您是在执行大量逻辑读操作还是实际逻辑写操作。这可能意味着您的磁盘布局不适合此问题。一般的解决方案是要么选择更好的索引策略,要么使用分区来帮助您快速删除行组,而不必显式删除所有行。
我花了31分钟删除了700k个元素。这是预期的行为吗?谢谢@conor。提供了一些见解-非常有用。当我们在一个标准的计划上发言时,我将试着增加好奇心,看看其中的区别。