0
我在爲我的網站的dev版本測試數據庫。不知何故,我創建了一個阻止事務,我不知道如何擺脫。意外的,長時間運行的阻塞事務
我試圖運行下面的查詢:
SELECT COUNT(*) FROM Users
但查詢並不去任何地方。我發現以下交易封鎖了它:
TransactionID: 19593
Transaction name: user_transaction
Total Locks: 158,936
Transaction Type: Full Transaction
Isolation Level: Unknown
此交易已運行90分鐘。
我相信這是與此查詢我跑:
DECLARE @cursor CURSOR
DECLARE @userid uniqueidentifier
SET @cursor = CURSOR
FOR
SELECT TOP(1000) userid FROM Users
OPEN @cursor
FETCH NEXT FROM @cursor INTO @userid
DECLARE @counter int = 0
WHILE @@FETCH_STATUS = 0
BEGIN
SET @counter = @counter + 1
PRINT @Counter
EXEC sp_removeUser @userid, 0
FETCH NEXT FROM @cursor INTO @userid
END
(我知道遊標是不好的,但通常就沒有必要刪除5000個用戶同時)
然而,這個查詢成功完成,所以我不知道爲什麼它可能仍然存在一個事務。在完成之前,我取消了此查詢的先前版本,是否會產生問題?
什麼可能導致這個阻塞事務,我該如何終止它?
是你運行光標明確的事務?你如何得出光標應該歸咎的結論?你還在哪裏運行它?在SSMS中?如果是,窗戶仍然打開?如果是這樣,SELECT @@ TRANCOUNT'告訴你什麼? –
我認爲它一定是光標,因爲我沒有運行其他可能會阻塞的查詢。是的,它是SSMS。 ......當我試圖關閉窗口時,它提到了一些有關未完成的交易。哎呦。什麼是正確的語法? – Oliver
您需要執行COMMIT足夠多的時間才能將@@ TRANCOUNT設置爲零。 –