如何终止等待 IO_COMPLETION 的挂起 SQL Server 事务?

Tar*_*zan 8 transaction sql-server-2012 kill

我们有一个事务已经运行了 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
Run Code Online (Sandbox Code Playgroud)

IT *_*nja 1

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

我曾经遇到过这样的情况:报告编写器、数据加载器等的错误查询的事务日志会使事务日志增长得大于数据文件大小,并且通常是性能不佳、编写不佳的查询,未进行优化或分块分成较小的事务,以便在事务完成后返回可用空间 -SIMPLE顺便说一下,这也在恢复模型数据库上 -FULL恢复模型数据库需要完成事务日志备份,以便能够重用已提交事务的事务日志空间。

根本问题可能是查询,因此确定谁在做什么并联系他们并用您的发现报告问题会给他们带来压力,要求他们修复逻辑,不要占用该磁盘分区的服务器磁盘空间 - 希望它是不是您的逻辑,但如果是,请考虑优化逻辑以查询调整性能。