2010-04-28 58 views
2

我發現許多睡眠過程,我的SQL Server數據庫和看起來像那些沉睡的spid一個阻塞另一個進程,該進程被停用太...SQL Server 2005的休眠SPID阻塞另一個SPID

莫非有人請解釋一下...

1.)睡眠過程如何阻止另一個進程? 2.)我看到很多睡眠過程...這是正常的嗎?

感謝

回答

2

1)如何能在睡眠過程中阻止另一個進程?

睡眠過程正在等待工作。仔細檢查是否真的有睡眠過程阻塞某些東西,因爲這是不太可能的。

2.)我看到很多睡眠過程......這是正常的嗎?

許多睡眠過程是完全正常的。例如,來自單個Web服務器的連接池通常會打開10個進程。這對於性能非常好。

這裏是一個list of process states

Status  Meaning 
--------------------------------------------------------------------------------- 
Background The SPID is running a background task, such as deadlock detection. 
Sleeping The SPID is not currently executing. This usually indicates that the 
      SPID is awaiting a command from the application. 
Running  The SPID is currently running on a scheduler. 
Runnable The SPID is in the runnable queue of a scheduler and waiting to get 
      scheduler time. 
Sos_scheduler_yield The SPID was running, but it has voluntarily yielded its 
      time slice on the scheduler to allow another SPID to acquire 
      scheduler time. 
Suspended The SPID is waiting for an event, such as a lock or a latch. 
Rollback The SPID is in rollback of a transaction. 
Defwakeup Indicates that the SPID is waiting for a resource that is in the 
      process of being freed. The waitresource field should indicate the 
      resource in question. 
4

持有鎖定不同的時間,但最常見的阻塞鎖,將X鎖,都持有該項交易的持續時間。由於事務生命週期與批生命週期完全無關,擁有睡眠SPID來擁有鎖定是絕對正常的,它只是意味着客戶端已經啓動了一個事務並執行了一些更新。只要客戶端決定繼續並向服務器發出命令來提交或回滾事務,阻塞就會消失。

其他頻繁鎖定是數據庫會話鎖定,它是由使用數據庫的連接持有的共享鎖定。維護連接的簡單行爲將保存鎖,但通常這與試圖獲取數據庫上的X鎖的操作(如ALTER DATABASE DDL)相沖突。

還有更多的深奧情況,比如恢復後的兩階段提交鎖,但這些可能不是你的問題。你所看到的很可能是用戶從SSMS運行某些東西並忘記提交的一個微不足道的情況,或者是一個持有長事務的應用程序,甚至可能會泄漏它們。