【发布时间】:2018-03-14 20:31:48
【问题描述】:
我目前正在处理一个使用 Azure 托管 SQL 服务器实例的应用程序。应用程序数据不占用大量物理空间,但记录很多。有时我需要删除大量记录,例如 500 万条记录。正如您可能猜到的那样,这需要大量时间和资源。问题是我不需要很多资源来做其他事情。为了在 30 分钟或更长时间内不将 DTU 固定在 100%,我需要在正常使用情况下拥有更多我需要的资源。我不在乎删除在合理范围内需要多长时间。根据我的研究,我找不到限制使用的好方法。如果我能以某种方式只允许 50% 的使用率用于操作或类似的东西,那就太好了。也许我错过了一些可以使删除更有效的东西,但我不这么认为。它是一个非常简单的表,在我用来删除的列上有一个索引。似乎被最大化的主要组件是数据 IO。如果有人对我如何管理这个有任何好的想法,我将不胜感激。
【问题讨论】:
-
你可以有一个 SP 删除一堆记录,等待几秒钟,再次删除,等等。
-
打破它我可以删除我的日志 IO。似乎最大化它的组件是数据 IO。如果我删除 10,000 条记录,大约需要 10 秒。在此期间,数据 IO 处于峰值。我添加了性能图的图像。
-
尝试使用较小的块,例如 1,000 条记录。请记住在每个块之后添加延迟。 CPU也涨了,你分析delete语句的执行计划了吗?确保你有正确的索引。
-
查看我的执行计划,我也有 2 个索引删除,成本相对较高。但是,删除的正确索引已经到位。
标签: sql azure azure-sql-database sql-delete