我無法弄清楚這一點。在SQL Server上,我有一個每秒運行幾十次的進程(將數據發送到服務器)。該過程運行良好,處理請求需要50ms和200ms之間。然後,大概(但零星地)每1.5分鐘一次所有請求突然需要15000ms到22000ms(15到22秒)。與此同時,服務器上的CPU使用率急劇下降。有時(大約70%的時間)平均磁盤隊列長度會在CPU下降並且請求減慢之前激增。SQL Server停止處理20秒
我正在監視perfmon上的CPU,它通常在20%到70%之間跳躍,平均CPU爲50%左右。當事情停止時,它會下降到0%,有20%的峯值,持續約20秒。
同時我正在看SQL活動監視器。通常列出1到4個EXECUTE事務,但是當發生這種情況時,EXECUTE事務開始上升到20或30個事務。交易進入,但不是進程。
我檢查塊,再也看不到任何:
Select A.*
From master.dbo.sysprocesses as A with (nolock)
Where A.blocked <> 0
請注意,我在「快照隔離」
運行我的系統記錄死鎖錯誤日誌,沒有報道。
我檢查了SQL代理中正在運行的其他進程,沒有計劃在發生這些事件時。
我看着SQL事件探查器進來的其他事件,什麼也沒有。我還觀看了文件增長事件,它什麼也沒有報告。
即使請求需要20000ms,SQL事件探查器報告2000下的讀取和50下的cpu。進程本身看起來並不消耗資源。然而,註銷事件報告高讀取和CPU(我不知道,如果這是相關的)。
在這些事件發生時,我的事件日誌中也沒有任何內容。
任何想法?任何其他地方看?
在Window 2003 32bit上運行SQL Server 2005 Standard。
Mike,請參閱我的博文[不明原因的SQL Server超時和間歇性阻塞](http://blog.digitaltools.com/post/2009/02/24/Unexplained-SQL-Server-Timeouts-and-Intermittent-Blocking的.aspx)。特別是如果你的存儲過程有一個「SELECT INTO」或從臨時表中刪除。 Jim – JBrooks 2009-12-15 22:39:30
作爲一項規則,我們使用表格變量(不是臨時表格),這些表格是在任何數據插入到表格中之前定義的。我會篩選整個過程並再次檢查確定。 – 2009-12-15 22:44:51