2013-07-23 99 views
39

我試圖在我們的應用程序中排查一些間歇性減速問題。我有一個單獨的問題here與更多的細節。sp_who2中「Suspended」狀態和高DiskIO的含義是什麼?

我運行了sp_who2並且我注意到一些狀態爲SUSPENDED和高DiskIO的連接。有人可以向我解釋那是什麼意思嗎?

enter image description here

+0

另請參見[如何找出spid狀態爲什麼被暫停的原因? Spid等待什麼資源?](http://stackoverflow.com/questions/22038695/how-to-find-out-why-the-status-of-a-spid-is-suspended-what-resources- the-spid-i) – Vadzim

回答

42

這是一個很廣泛的問題,所以我打算給一個廣闊的答案。

  1. 查詢在請求訪問當前不可用的資源時被掛起。這可以是像鎖定行或像內存數據頁面這樣的物理資源的邏輯資源。一旦資源可用,查詢就會再次開始運行。  
  2. 高磁盤IO意味着需要訪問大量數據頁才能滿足請求。

這就是我從上面的截圖中可以看出的全部內容。但是,如果我想推測,你可能有一個IO子系統太慢而無法跟上需求。這可能是由於缺少索引或實際太慢的磁盤造成的。請記住,單個OLTP查詢的15000次讀取稍高,但並不罕見。

+1

如果原因是鎖定,那麼不應該顯示在「BlkBy」或「blocking_session_id」中? – 2014-04-14 21:44:27

+1

正確,@JonofAllTrades。如果進程A試圖訪問被進程B鎖定的資源,則B的會話ID將顯示在A的blocking_process_id列中。 –

17

暫停。 會話正在等待事件(如I/O)完成。

http://msdn.microsoft.com/en-us/library/ms174313.aspx

+2

這意味着數據庫所在的磁盤正在被大量使用(數據庫自身或服務器上的其他軟件),數據庫不得不排隊輪流訪問驅動器。 –

+0

這就是我要找的。這些數字是否被認爲是高I/O? – NullReference

+0

正如我在回答中所說的那樣,這個解釋實際上是猜測,因爲你的屏幕截圖不能揭示查詢實際上正在等待什麼。對於OLTP查詢,15K讀取稍高但不超出範圍。 –