2010-03-05 17 views
2

我的數據庫服務器突然使用了100%的處理,並且似乎我的網站上沒有任何流量。我能做些什麼來查看增加的流量來自SQL Server Management Studio內部的位置?以100%運行的數據庫

+0

任何後臺進程?備份運行?預定的工作? – shahkalpesh 2010-03-05 15:22:36

+0

沒有別的東西在運行。我們無法查詢數據庫,因爲它太高了。 – Jason 2010-03-05 15:23:42

+0

這個問題可能更適合於serverfault.com。 – 2010-03-05 15:25:28

回答

1

處理器使用率高的典型原因是來自存儲過程或其他方面的未優化查詢。我會看看你經常運行哪些存儲過程,並確保它們有效地運行並被正確地編入索引。 http://msmvps.com/blogs/omar/archive/2006/08/15/100-cpu-100-io-a-near-death-experience-for-sql-server-2005-and-us.aspx

http://www.aneef.net/2009/04/11/100-cpu-sql-server-2005-servers-crashes/

性能調優的文章:

的這種資源的一些例子和 http://207.46.16.252/en-us/magazine/2007.10.sqlcpu.aspx

+0

OP狀態'服務器突然使用100%的處理,它似乎沒有任何更多的流量',而這可能是不好的疑問,我認爲「突如其來」意味着這是一個尖銳的問題,而不是一個長期的問題,這通常是不好的問題。 – 2010-03-05 16:00:29

0

嘗試檢查文件中的可用空間量。它可能是,SQL是關閉的提高您的MDF/LDF

的大小如果你沒有太多的自由空間通過設置固定的大小,而不是%

0

增加看一看在SQL Server活動監視器,特別是CPU列。也許你有一個或多個查詢運行狂野。

+0

服務器危機I次,我發現活動監視器凍結。如果發生這種情況,您通常仍然可以從我的答案中運行查詢以獲取相同的信息,包括spid,阻止信息,cpu使用情況和查詢文本。 – 2010-03-05 16:04:32

+0

好點 - 活動監視器可能在內部做類似的事情,但它需要更多的CPU用於花哨的UI。 – Ray 2010-03-05 17:30:44

1

雖然我使用這個查詢來快速檢查阻塞(低開銷),你可以用它來看看你有多少進程在運行,每個進程的CPU時間,讀,寫,和logical_reads:

;with Blockers AS 
( SELECT 

     r.session_id AS spid 
      ,r.blocking_session_id AS BlockingSPID 
      ,LEFT(OBJECT_NAME(st.objectid, st.dbid),50) AS ShortObjectName 
      ,LEFT(DB_NAME(r.database_id),50) AS DatabaseName 
      ,s.program_name 
      ,s.login_name 
      ,r.cpu_time,r.reads,r.writes,r.logical_reads 
      ,OBJECT_NAME(st.objectid, st.dbid) AS ObjectName 
      ,SUBSTRING(st.text, (r.statement_start_offset/2)+1,((CASE r.statement_end_offset 
                     WHEN -1 THEN DATALENGTH(st.text) 
                     ELSE r.statement_end_offset 
                    END - r.statement_start_offset 
                   )/2 
                   ) + 1 
        ) AS SQLText 
     FROM sys.dm_exec_requests       r 
      JOIN sys.dm_exec_sessions      s ON r.session_id = s.session_id 
      CROSS APPLY sys.dm_exec_sql_text (sql_handle) st 
    --WHERE r.session_id > 50 
) 
SELECT Blockers.* FROM Blockers WHERE [email protected]@SPID 
+0

如果您認爲有一個進程正在運行,您可以始終發出'KILL n',其中'n'是上述查詢的spid。 http://msdn.microsoft.com/en-us/library/ms173730.aspx – 2010-03-05 15:51:10