2009-12-11 46 views
9

我有一個SQL 2005 x64服​​務器,當我嘗試對它發出一些查詢時(例如,當我嘗試創建索引時),我的SPID立即進入「睡眠」狀態,似乎無限期地在那裏等待。它沒有被阻塞(SP_WHO2中的「BLKBY」列爲空),並且CPU和DiskIO值非常小(每個值小於300),並且不會增長。SQL Server - 創建索引時,爲什麼我的SPID會「掛起」但未被阻止?

我的查詢可能在等待什麼?如果我在索引表中做了一個SELECT *表,我可以在一分鐘內得到所有百萬行,所以它不會阻止表訪問,甚至(看起來)表爭用。

關於我可以檢查的其他東西的任何想法?我只需要放棄並重新啓動我的SQL實例? :)

詳細信息:我從SSMS中的另一個選項卡運行CREATE INDEX,它永遠不會返回 - 它只是顯示「正在執行」並且從不返回,所以我不認爲該進程已被放棄。

回答

19
select * 
from sys.dm_exec_requests r 
join sys.dm_os_tasks t on r.session_id = t.session_id 
where r.session_id = <spid of create index>; 

這不僅會顯示請求的狀態,還會顯示請求產生的所有任務。在線CREATE INDEX可能會產生並行線程,並且會暫停自己,直到完成。

+0

優秀的答案。就是我在找的東西。 http://blog.sqlauthority.com/2009/01/07/sql-server-find-currently-running-query-t-sql/讓我走了,這顯示了我確切的問題所在。 – 2012-01-06 12:14:09

+0

謝謝,只是救了我的培根! – 2013-04-22 05:26:21

+0

如果僅返回行並且其狀態爲「暫停」? – Nuzzolilo 2015-12-02 22:16:08

-1

該命令已完成且連接正在等待下一個命令。

http://blogs.msdn.com/psssql/archive/2008/04/21/how-it-works-what-is-a-sleeping-awaiting-command-session.aspx

從網址: 「這個問題是一樣古老的SQL Server事實上,它可以追溯到到Sybase天,但繼續愚弄和益智管理員

與狀態會話。睡眠/等待命令只是一個客戶端連接,沒有對SQL Server的活動查詢。下表顯示了會話從運行狀態到睡眠狀態的轉換。「

+0

查詢,但我正在從SSMS的命令,我會仍然顯示「執行」 - 它看起來並沒有完成,並且它以「暫停」的方式太快而無法完成。有趣的鏈接,雖然 - 我不知道這種聯繫。 – SqlRyan 2009-12-11 20:09:48

1

'暫停'狀態有時可能會引起誤解。例如,在等待磁盤I/O完成時,您的查詢可能會「暫停」。這可以通過運行下面的查詢並檢查wait_type列來驗證。 PAGEIOLATCH_EX表示由於等待磁盤I/O而導致查詢被阻止。這並不意味着查詢沒有取得進展。

this page,瞭解更多有關PAGEIOLATCH_EX

這裏是返回上述信息

SELECT qs.percent_complete , 
     qs.session_id , 
     scheduler_id , 
     blocking_session_id , 
     qs.status , 
     command , 
     wait_time , 
     wait_type , 
     last_wait_type , 
     wait_resource , 
     ST.text , 
     host_name , 
     program_name 
FROM sys.dm_exec_requests qs 
     LEFT JOIN sys.dm_exec_sessions es ON (qs.session_id = es.session_id) 
     CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS ST 
+0

感謝您的查詢。確定CPU時間和IO的命令確實很有幫助。 – 2017-06-10 11:40:34