我的一位同事(我保证是同事!)自上周四以来在我们的主 SQL Server 上运行了一个更新(是的,伙计们,我们现在正在推进 100 小时!)。有问题的 SQL(在一个事务中,我可能会添加)是:
update daily_prices set min_date = (select min(a.date)
from daily_prices a
where a.key = daily_prices.key and
a.iid = daily_prices.iid)
(是的,我知道,令人发指...)
查询计划的总成本为 22186.7,估计要更新的行数约为 1.51 亿。
我们显然需要以一种或另一种方式解决这个查询,我们意识到如果我们要终止查询,我们将产生一些残酷的回滚,但我们无法知道它已经走了多远。我们唯一知道的是来自 sys.dm_exec_requests 的这个条目:
session_id status query_text cpu_time total_elapsed_time reads writeslogical_reads 52 暂停更新 daily_prices... 2328469 408947075 13831137 42458588 151809497
所以我的问题是,我们最好的行动方案是什么?
- 等等
- 杀死它并回滚,并希望它在下一个冰河时代之前回滚
- 别的东西?