sql-server - SQL Server 2012 上的 CPU 利用率高

标签 sql-server

我在特定时间面临高 CPU 使用率。 4 个处理器、16GB RAM、29 个数据库 数据文件总大小 60 GB。我经常遇到线程数过高的情况。 谁能帮我解决这个问题吗?

最佳答案

没有立即解决方案。您必须找出导致 CPU 高的查询并对它们进行微调。

低于 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

此外,您说,线程数太高。它可能也是由于并行性造成的。所以,您可能必须找出并行运行的查询。

找到它们后,找出它们并行执行的原因。大多数情况下,也可能是因为缺少索引。

此查询将帮助您: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

关于sql-server - SQL Server 2012 上的 CPU 利用率高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42224873/

相关文章:

sql-server - 为什么 READ_COMMITTED_SNAPSHOT 默认情况下未启用?

mysql - 如何使用 linux 命令行对远程数据库执行 "INSERT INTO"查询?

SQL Split Island On Criteria

sql-server - 数据库索引是否与列数据占用相同数量的磁盘空间?

sql-server - 用 JOIN 或 WITH 替换子查询

sql-server - SQL Server 确定表列的物理大小

sql-server - 如何在 SQL Server 中获得正确的查询执行时间?

SQL - 如何查找哪些操作正在使用所有最大并发连接

c# - 多个相关表与 1 :1 Relations. 第一个表与自动编号

mysql - 当有两个或多个进程同时请求它时,数据库如何决定它应该给哪个进程锁定?