Sql server 增量删除-它有什么好处?
如果我有一个包含大量数据的表…如果我做增量删除而不是“一次性删除”。有什么好处 一次性删除 增量删除 我得到了他的帮助Sql server 增量删除-它有什么好处?,sql-server,performance,sql-delete,Sql Server,Performance,Sql Delete,如果我有一个包含大量数据的表…如果我做增量删除而不是“一次性删除”。有什么好处 一次性删除 增量删除 我得到了他的帮助 取决于配置,我看到过大量删除会破坏事务日志,导致磁盘空间不足 您还可以通过使用较小的批来避免锁定升级 或者,您可以导出要保留的数据,截断表,然后重新加载数据。这可能更快。即使您希望kepp 50%的数据,它仍然可以更快-truncate只记录很少的数据。运行自己的基准测试不同之处在于回滚信息的大小 SQL Server是事务性的,在提交删除之前,应该可以回滚事务 以以下为例:
取决于配置,我看到过大量删除会破坏事务日志,导致磁盘空间不足
您还可以通过使用较小的批来避免锁定升级 或者,您可以导出要保留的数据,截断表,然后重新加载数据。这可能更快。即使您希望kepp 50%的数据,它仍然可以更快-truncate只记录很少的数据。运行自己的基准测试不同之处在于回滚信息的大小 SQL Server是事务性的,在提交删除之前,应该可以回滚事务 以以下为例:
- 硬盘上的可用空间为10 GB
- 要删除的信息20 GB
但我不需要理解复杂的技术(如锁升级等)感受/猜测用小块吃/咬西瓜的好处,而不是把整片西瓜放进我的嘴里只需补充一点,一旦持有5000个锁,就会尝试锁升级,因此即使在增量版本中,批量大小也需要减少很多才能获得此好处。减少批量大小->你是说changing从“100000”到“100”的值。在下面的查询中?删除顶部(100000)从表_1中,其中BID=@BID和CN=@CN和PD=@PD;@Anish-5000假设删除操作采用行锁。但是,如果您不必担心并发访问,这并不重要。@Anish,当SQL server优化器通过将锁定表而不是行的条件时,锁升级就发生了。@Anishe许多级别的升级,但这是一般的想法。我需要保留的数据比我希望删除的数据多。因此我认为这种方法不好……不是吗?它仍然可以更快-truncate只记录了最少的日志。运行您自己的基准测试。要知道:如果表被调用,则不可能截断表在复制或日志传送中,如果外键引用了要截断的表。一次事务中的4亿条记录将炸毁您的日志,如果要这样做,请确保您有足够的空间。我不会一次删除400 mn…我有一个包含400 mn数据的表…我将一次从中删除150万数据…一个d向其中插入一些数据。好的……这意味着……增量删除将明显减少(删除数据)的时间@Anish,更重要的是,它更有可能工作,我们最近不得不从一个实时数据库中删除15000000行,我们一次删除500000行。一次删除所有行将导致系统崩溃。我在看…为什么/如何受益…我从一些人那里得到了答案,这是因为sql server保留的日志…以及在吃西瓜的时候,我没有记录西瓜的习惯,因为我从不把西瓜倒回去。
DELETE table_1
WHERE BID = @BID
AND CN = @CN
AND PD = @PD;
While (1=1)
Begin
DELETE TOP (100000) FROM table_1
WHERE BID = @BID
AND CN = @CN
AND PD = @PD;
If @@rowcount = 0 -- No row affected.
BREAK
ELSE
Continue
End