2016-11-16 54 views
-1

最近幾天,我們的sql server cpu佔用率達到(生產服務器)100%。我們有200個服務器數據庫。有人可以幫助如何查找哪些數據庫和哪個表,存儲過程在特定時間使用CPU的時間?需要幫助來解決SQL Server的CPU使用率(違規達到100%)?

+0

你怎麼知道這是'SQL'引起的這些問題,而不是一個過程之外呢?這是來自Pinal Dave關於這個問題的一個很好的[** read **](http://logicalread.solarwinds.com/troubleshoot-high-cpu-sql-server-pd01/#.WCvhr7NMHk9)。 – Codexer

+0

感謝您的回覆。我在監視Windows任務管理器的性能,CPU使用率達到100%。在cpu期間我們有服務器警報郵件違反了使用情況。有沒有查詢從時間到時間查找表,SP和數據庫名稱? –

+0

'select * from master..sysprocesses where status ='runnable' - 註釋掉 order by CPU desc'這可以檢測到高CPU連接... SQL Profiler在這種情況下也可以很好... – Codexer

回答

0

此代碼幫助我獲得預期的結果。

SELECT TOP 10 DBName = DB_NAME(qt.dbid),o.Name,qt.text, 
SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1, 
((CASE qs.statement_end_offset 
WHEN -1 THEN DATALENGTH(qt.TEXT) 
ELSE qs.statement_end_offset 
END - qs.statement_start_offset)/2)+1), 
qs.execution_count, 
qs.total_logical_reads, qs.last_logical_reads, 
qs.total_logical_writes, qs.last_logical_writes, 
qs.total_worker_time, 
qs.last_worker_time, 
qs.total_elapsed_time/1000000 total_elapsed_time_in_S, 
qs.last_elapsed_time/1000000 last_elapsed_time_in_S, 
qs.last_execution_time, 
qp.query_plan,qs.sql_handle 
FROM sys.dm_exec_query_stats qs 
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt 
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp 
LEFT JOIN sys.objects o on o.object_id = qt.objectid 
--ORDER BY qs.total_logical_reads DESC -- logical reads 
-- ORDER BY qs.total_logical_writes DESC -- logical writes 
WHERE qs.last_execution_time>= 'Your from date' 
AND qs.last_execution_time<='Your from date' 
ORDER BY qs.last_worker_time DESC -- CPU time 
+0

計劃緩存並沒有告訴你'......在特定的CPU使用時間內,它會顯示消耗的時間,它只顯示現在被緩存的計劃,以及它們的cpu/io使用情況一直存在。 –