J1m*_*mmy 2 performance sql-server-2012 performance-tuning
我试图弄清楚发生了什么,但目前我无法解决这个问题......
我有两台具有相同规格的服务器,实际上也连接了几乎相同的用户(只有我)...
其中一台服务器的 CPU 使用率稳定在 20%,而另一台服务器的 CPU 使用率稳定在 1%...相同的数据库,相同的进程...
如果 SQL Server 和其他服务器都处于空闲状态,我如何才能知道与其他服务器相比,SQL Server 上实际消耗如此大量 CPU 的是什么?
首先,您应该找出哪个服务/进程消耗最大的 CPU。
您可以使用微软提供的Process Monitor工具,它提供了详细信息。
您可以在这里找到它https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx
如果是 SQL Server,那么
第一,我建议使用master.dbo.sysprocessas
select * from master.dbo.sysprocesses order by cpu desc
Run Code Online (Sandbox Code Playgroud)
如果它返回 spid < 50 则表示它是 SQL Server 自己的进程而不是用户进程。因此,根据lastwaittype列值,您可以更改推荐的(根据等待类型)SQL Server 配置或调整您的硬件。
如果它返回进程 ID >50 意味着它是用户进程,您可以使用下面的查询来查找有关该进程的详细信息并调整您的查询。
会话是否处于活动状态(正在运行、可运行、已挂起)
select
db_name(sp.dbid),sp.spid,er.wait_type,er.wait_time,er.wait_resource,er.total_elapsed_time,st.text,qp.query_plan
,ec.net_packet_size,ec.client_net_address,es.host_name,es.program_name,es.client_interface_name
,es.status,es.cpu_time,qmg.granted_memory_kb,es.total_scheduled_time,es.total_elapsed_time
,es.reads,es.writes,es.logical_reads
from
sys.dm_exec_requests er
inner join master.dbo.sysprocesses sp
on er.session_id=sp.spid
inner join sys.dm_exec_connections ec
on er.session_id=ec.session_id
inner join sys.dm_exec_sessions es
on ec.session_id=es.session_id
inner join sys.dm_exec_query_memory_grants qmg
on er.session_id=qmg.session_id
cross apply (select text from sys.dm_exec_sql_text(er.sql_handle)) st
cross apply (select * from sys.dm_exec_query_plan(er.plan_handle)) qp
Run Code Online (Sandbox Code Playgroud)
如果会话不活动(睡眠)。
select a.spid,db_name(b.dbid) [DB Name],b.text [Query],a.cpu
from master.dbo.sysprocesses a
cross apply sys.dm_exec_sql_text(a.sql_handle) b where status='sleeping'
Run Code Online (Sandbox Code Playgroud)
谢谢