2012-04-25 83 views
11

我們有一臺Windows 2008 R2服務器,其中包含SQL Server 2008。該服務器有多個.net站點,其上有SQL服務器數據庫。SQL Server 2008高CPU使用率

我們目前正在經歷95%的平均CPU使用率,並且SQL Server負責大部分使用。

我想確定哪個網站對此負責,以便我們可以優化它或將其移動到另一臺服務器。但我沒有找到任何直接的方式來看這個。

我一直在尋找,如果我能找到的:

  • 是獲得最多CPU密集型查詢
  • 的過程,是負責CPU密集型查詢

一件事數據庫這也使得事情複雜化的是,我們有多個站點和「crons」使用同一個數據庫。因此,一旦我確定了數據庫,我還需要獲得有關site/cron負責的一些提示。使用動態管理視圖

我真的很感謝所有幫助這個,因爲這問題使我們的網站很慢...

感謝

回答

27

您可以識別高成本查詢(和它們所關聯的數據庫) ,例如from this TechNet article

SELECT TOP 50 
[Average CPU used] = total_worker_time/qs.execution_count, 
[Total CPU used] = total_worker_time, 
[Execution count] = qs.execution_count, 
[Individual Query] = SUBSTRING (qt.text,qs.statement_start_offset/2, 
     (CASE WHEN qs.statement_end_offset = -1 
      THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2 
      ELSE qs.statement_end_offset END - 
qs.statement_start_offset)/2) 
,[Parent Query] = qt.text 
,DatabaseName = DB_NAME(qt.dbid) 
FROM sys.dm_exec_query_stats qs 
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt 
ORDER BY [Average CPU used] DESC; 

這些會告訴你的重擊手的查詢,但不幸的是它不會找出可能有小的查詢單獨使用CPU的小位,但在總量大位非常高容量的數據庫。你可以做到這一點與此查詢from Glenn Allan Berry's DMV queries

WITH DB_CPU_Stats 
AS 
(SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], 
    SUM(total_worker_time) AS [CPU_Time_Ms] 
FROM sys.dm_exec_query_stats AS qs 
CROSS APPLY (SELECT CONVERT(int, value) AS [DatabaseID] 
       FROM sys.dm_exec_plan_attributes(qs.plan_handle) 
       WHERE attribute = N'dbid') AS F_DB 
GROUP BY DatabaseID) 
SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num], 
     DatabaseName, [CPU_Time_Ms], 
     CAST([CPU_Time_Ms] * 1.0/SUM([CPU_Time_Ms]) 
     OVER() * 100.0 AS DECIMAL(5, 2)) AS [CPUPercent] 
FROM DB_CPU_Stats 
WHERE DatabaseID > 4 -- system databases 
AND DatabaseID <> 32767 -- ResourceDB 
ORDER BY row_num OPTION (RECOMPILE); 

這些查詢的標識都沒有跑他們的應用程序,動態管理視圖中使用不存儲該信息(你將不得不趕在行爲和注意查詢sys.dm_exec_sessions中的應用程序名稱或查看跟蹤)。

當然你也可以在市場上(免責聲明自動化與各種第三方性能工具這項工作:我爲他們的工作之一,SQL哨兵,誰生產Performance Advisor,其中完成所有上述情況,包括跟蹤高成本的查詢和維護關於他們運行哪個數據庫以及稱爲他們的應用程序的信息)。