2017-02-14 3 views
1

Я столкнулся с высоким уровнем использования процессора в определенное время. 4 процессора, 16 ГБ оперативной памяти, 29 баз данных общий размер файла данных 60 ГБ. я часто получал высокое количество потоков слишком велико. Может ли кто-нибудь помочь мне в этом?Высокая загрузка процессора на sqlserver2012

+1

что сделали до сих пор? вы посмотрели на ожидания? это, возможно, хорошее начало https://mssqlwiki.com/2012/10/04/troubleshooting-sql-server-high-cpu-usage/ –

+1

Щелкните правой кнопкой мыши по базе данных и просмотрите различные доступные отчеты. Некоторые из них весьма полезны для определения «тяжелых» взглядов и процедур. –

ответ

3

Нет немедленного решения. Вам нужно будет найти запросы, которые вызывают высокий уровень ЦП и их тонкую настройку.

Ниже DMV, дает запросы, которые потребляют больше CPU

SELECT TOP 50 qs.creation_time, qs.execution_count, qs.total_worker_time as total_cpu_time, qs.max_worker_time as max_cpu_time, 
qs.total_elapsed_time, qs.max_elapsed_time, qs.total_logical_reads, qs.max_logical_reads, qs.total_physical_reads, qs.max_physical_reads,t.[text], qp.query_plan, t.dbid, t.objectid, t.encrypted, qs.plan_handle, qs.plan_generation_num FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS t CROSS APPLY sys.dm_exec_query_plan(plan_handle) AS qp 
ORDER BY qs.total_worker_time DESC 

дальше, вы говорите, число потоков является high.It может быть из-за параллельности, как well..so, вы можете должны найти, запросы, которые работают параллельно.

После их нахождения выясните причины их параллельного выполнения. В большинстве случаев это может быть из-за отсутствия индексов.

Этот запрос поможет вам в этом: Find Query Plans That May Utilize Parallelism

SELECT 
p.*, 
q.*, 
cp.plan_handle 
FROM sys.dm_exec_cached_plans cp 
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) p 
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) q 
WHERE cp.cacheobjtype = 'Compiled Plan' 
AND p.query_plan.value('declare namespace p="http://schemas.microsoft.com/sqlserver/2004/07/showplan";max(//p:RelOp/@Parallel)', 'float') > 0 
+1

Второй запрос был очень полезен, чтобы знать –

0

использовать следующую инструкцию, чтобы проверить, какая база данных используется наиболее CPU:

WITH DB_CPU_Stats 
AS 
(SELECT DatabaseID, DB_Name(DatabaseID) AS [Database Name],  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 [CPU Rank], 
[Database Name], [CPU_Time_Ms] AS [CPU Time (ms)], 
CAST([CPU_Time_Ms] * 1.0/SUM([CPU_Time_Ms]) OVER() * 100.0 AS DECIMAL(5,2)) AS [CPU Percent] 
FROM DB_CPU_Stats 
WHERE DatabaseID <> 32767 -- ResourceDB 
ORDER BY [CPU Rank] OPTION (RECOMPILE); 

Или это заявление, чтобы найти который SQL заявление используется большинство ЦП

SELECT TOP 50 
[Avg. MultiCore/CPU time(sec)] = qs.total_worker_time/1000000/qs.execution_count, 
[Total MultiCore/CPU time(sec)] = qs.total_worker_time/1000000, 
[Avg. Elapsed Time(sec)] = qs.total_elapsed_time/1000000/qs.execution_count, 
[Total Elapsed Time(sec)] = qs.total_elapsed_time/1000000, 
qs.execution_count, 
[Avg. I/O] = (total_logical_reads + total_logical_writes)/qs.execution_count, 
[Total I/O] = total_logical_reads + total_logical_writes, 
Query = 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 
), 
Batch = qt.[text], 
[DB] = DB_NAME(qt.[dbid]), 
qs.last_execution_time, 
qp.query_plan 
FROM sys.dm_exec_query_stats AS qs 
CROSS APPLY sys.dm_exec_sql_text(qs.[sql_handle]) AS qt 
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qp 
where qs.execution_count > 5 --more than 5 occurences 
ORDER BY [Total MultiCore/CPU time(sec)] DESC 

2-я заявка была найдена здесь: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/33c7521f-7ed4-4574-82dd-aeb2f32111c5/find-high-cpu-query?forum=sqldatabaseengine

Смежные вопросы