Killing a SPID and Checking Rollback progress in SQL Server
Written By: Armando Prato -- 4/9/2008 -- 0 comments
| Stay informed - get the MSSQLTips.com newsletter and win - click here |
Problem
From time to time, I encounter blocking situations where I end up issuing a KILL command against the blocking SPID. When I run sp_who2, I can see the killed SPID is in a ROLLBACK state. Is there any way I can get an idea of how long the rollback for the SPID will take?
Solution
There sure is! The KILL command offers the WITH STATUSONLY argument which displays an estimation of completion for an in progress ROLLBACK. Using KILL with this argument does not kill a connection; it simply produces a progress report.
Run the following script in a new query window. It captures the connected SPID for the query and displays the fact that the SPID has an open transaction when the script completes:
| set nocount on go select 'SPID = ' + cast(@@spid as varchar) -- what connection is this? create table test (col1 int identity) -- create a test table begin tran tran1 -- start a transaction |
Now open a new connection and issue the following statements to kill the connection we just opened and to examine the connection's state:
| kill 52 go exec sp_who2 go |
Now that we've KILLed the SPID, we can monitor its rollback progress by issuing KILL using the WITH STATUSONLY argument.
| kill 52 with statusonly |
As you can see, you can get a good estimation from the server of rollback progress.
本文介绍如何在SQL Server中使用KILL命令终止阻塞的SPID,并通过WITH STATUS ONLY参数来检查被终止进程的回滚进度。文中提供了一个具体的例子,展示了如何监测回滚过程的预计完成时间。
2662

被折叠的 条评论
为什么被折叠?



