如何终止等待IO_COMPLETION的暂停的SQL Server事务?


8

我们有一个已运行5个小时以上的交易。我们的磁盘空间不足。会话已被终止,但仍在等待IO_COMPLETION。实际上,wait_type刚刚更改为PAGEIOLATCH_EX。如何终止已暂停的SQL Server事务?我不担心丢失数据,因为所有数据都可以重新填充。

session_id: 54
STATUS: suspended
blocked by: 0
wait_type: PAGEIOLATCH_EX
Elapsed Time (in Sec): 19750.420000
open_transaction_count: 2

3
让它完成..否则,如果您突然断电或拔出SQL Server服务,则回滚将花费一些时间。由于您不担心丢失数据,因此如何从上次备份还原数据库,然后重新填充数据呢?此外,您可以KILL 54 WITH STATUSONLY用来找出回滚需要多长时间。
Kin Shah 2015年

我运行了KILL 54 WITH STATUSONLY,并收到以下消息:SPID 54:正在进行事务回滚。估计回滚完成:0%。估计剩余时间:0秒。我不相信0秒部分。
Tarzan 2015年

2
回滚是单线程操作,因此,例如,如果您的原始事务运行时并行运行了8个线程,直到被杀死,回滚可能会花费8倍的时间。
詹姆斯·Z

@Tarzan KILL .. WITH STATUSONLY不准确,我明白你的意思。你可以试试Alter database .. set OFFLINE or single_User WITH ROLLBACK IMMEDIATE吗?
Kin Shah 2015年

2
我最终让它运行了一整夜。终于完成了。hoo!感谢您的评论。
Tarzan 2015年

Answers:


1

下次发生这种情况时,请运行sp_WhoIsActive下载/文档),看看谁在运行什么,并查看逻辑。检查是否可以优化TSQL以使其运行更快,或者将其分割成较小的事务。

我曾经遇到过这样的情况,即报告编写者,数据加载器等执行的错误查询的事务日志会使事务日志的大小大于数据文件的大小,这通常是性能不好,编写不佳的查询,并且没有经过优化或分块到较小的事务中,以便在事务完成后释放可用空间SIMPLE(顺便说一下,这也位于恢复模型数据库上),FULL恢复模型数据库将需要完成事务日志备份,以实现已提交事务的事务日志空间的重用。

根本问题可能是查询,因此确定谁在做什么并与他们联系并用发现的结果报告问题将给他们施加压力,迫使他们修复其逻辑,以免占用该磁盘分区的服务器磁盘空间-希望它是而不是您的逻辑,如果是,请查看优化逻辑以查询性能调整。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.