我有一个很长时间运行的SQL查询(数据导入等)。它是垃圾 - 它使用游标,它运行缓慢。它正在这样做,所以我不太担心性能。
无论如何,我可以暂停一会儿(而不是取消查询)吗?
它嚼了一点CPU,所以我希望暂停它,做一些其他的东西......然后恢复它。
我假设答案是“否”,因为行和数据被锁定等等。
我正在使用Sql Server 2008,顺便说一句。
答案 0 :(得分:7)
我所知道的最佳近似值是
BEGIN
WAITFOR DELAY 'TIME';
EXECUTE XXXX;
END;
GO
答案 1 :(得分:4)
你不仅可以暂停它,这样做会很糟糕。 SQL查询保存锁(用于事务完整性),如果暂停查询,则在暂停时必须保留任何锁。这可能会减慢服务器上运行的其他查询的速度。
我不会暂停它,而是编写查询以便终止它,并从重新启动时停止的位置开始。这需要您作为查询作者的工作,但如果您想要中断和恢复查询,这是唯一可行的方法。由于其他原因,这也是一个好主意:长时间运行的查询通常会被中断。
答案 2 :(得分:2)
单击调试按钮而不是执行。 SQL 2008引入了即时调试查询的功能。在方便的位置设置断点
答案 3 :(得分:0)
在处理类似的情况时,我试图浏览整个数据列表,这可能是巨大的,并且可以告诉我已经访问过哪些数据,我会以块的形式运行处理。
update or whatever
where (still not done)
limit 1000
然后我会继续运行查询,直到没有行被修改。这会将锁定分解为合理的时间块,并且可以允许您在系统处于生产状态时在表之间移动数千万行。
雅各
答案 4 :(得分:0)
您可以使用资源调控器,而不是暂停脚本。这样,您可以允许脚本在后台运行,而不会严重影响其他任务的性能。