sql server 查詢某個表一直顯示"正在執行中..."的問題


問題描述:只是單純的執行了"select count(*) from 某表";數據表中只有一兩條數據,能查詢其他表,唯獨這個表不能進行任何操作;

經百度搜索實驗,發現應該是某個進程阻塞了,使用了一下代碼進行的查詢(這個比較詳細):

 1 declare @spid int,@bl int  
 2 DECLARE s_cur CURSOR FOR   select  0 ,blocked   from (select * from sys.sysprocesses where  blocked>0 ) a  
 3 where not exists(select * from (select * from sys.sysprocesses where  blocked>0 ) b   where a.blocked=spid)   
 4 union 
 5 select spid,blocked from sys.sysprocesses where  blocked>0   OPEN s_cur   FETCH NEXT FROM s_cur INTO @spid,@bl   WHILE @@FETCH_STATUS = 0  
 6 begin   if @spid =0             
 7 select ' 引起數據庫死鎖的是: '+ CAST(@bl AS VARCHAR(10)) + ' 進程號, 其執行的SQL 語法如下'   else              
 8 select ' 進程號SPID :'+ CAST(@spid AS VARCHAR(10))+ '' + ' 進程號SPID :'+ CAST(@bl AS VARCHAR(10)) +' 阻塞, 其當前進程執行的SQL 語法如下' 
 9 DBCC INPUTBUFFER (@bl )   FETCH NEXT FROM s_cur INTO @spid,@bl   end   CLOSE s_cur  
10 DEALLOCATE s_cur 

還有其他的語句也都可以證明有進程被阻塞了,只不過我是初學者,看不懂:

1 use master
2 go
3 --檢索死鎖進程
4 select spid, blocked, loginame, last_batch, status, cmd, hostname, program_name
5 from sysprocesses
6 where spid in
7 ( select blocked from sysprocesses where blocked <> 0 ) or (blocked <>0)

或者

1 select * from sys.sysprocesses where blocked<>0

解決辦法:只需要殺死阻塞進程就可以了:

1 select spid, blocked, loginame, last_batch, status, cmd, hostname, program_name
2 from sysprocesses
3 where spid in
4 ( select blocked from sysprocesses where blocked <> 0 ) or (blocked <>0)
5 
6 kill spid(進程號)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM