我在使用大量数据在Azure SQL数据库上执行删除语句时遇到问题。
我在Azure SQL数据库上有一个包含约500万条记录的销售表。
当我执行一个存储过程来删除此表中的所有数据时,它会执行一段时间,然后生成一个带有新id的新进程,这会使现有进程开始回滚,并在新进程启动后回滚删除数据然后新进程再次生成另一个进程并开始回滚,同样的重复将永远持续。
最后,几个小时后,存储过程失败,数据不会被删除。
我正在使用带有100DTU的Azure SQL数据库。
有人知道会发生什么吗?
答案 0 :(得分:1)
听起来你正在经历节流。 You can read more about that he再。您还可以查看sys.event_log以查看是否存在限制事件。最好的解决方案是使用某种形式的分页查询将删除分解为更小的块。
答案 1 :(得分:1)
删除过程可能已达到该层的限制。您可以在删除过程运行时通过运行以下查询来确认。
SELECT
(COUNT(end_time) - SUM(CASE WHEN avg_cpu_percent > 80 THEN 1 ELSE 0 END) * 1.0) / COUNT(end_time) AS 'CPU Fit Percent'
,(COUNT(end_time) - SUM(CASE WHEN avg_log_write_percent > 80 THEN 1 ELSE 0 END) * 1.0) / COUNT(end_time) AS 'Log Write Fit Percent'
,(COUNT(end_time) - SUM(CASE WHEN avg_data_io_percent > 80 THEN 1 ELSE 0 END) * 1.0) / COUNT(end_time) AS 'Physical Data Read Fit Percent'
FROM sys.dm_db_resource_stats
- 服务水平目标(SLO)为99.9%< =进入下一层
希望这会有所帮助..
此致
Alberto Morillo