我在服务器机器上安装了一个SQL server 2005实例,其中包含两个vm。
服务器规范是*处理器:* Xeon : 6GB操作系统: vm软件上的窗口服务器
它正在运行部署在IIS和sql server数据库实例上的asp.net应用程序。每天约有500个用户使用此应用程序。每隔22天,处理器CPU使用率达到100%至95%。使用最多的进程(在任务管理器中)是sql服务器的实例,该实例最大(全部)处理处理器。Ram仅使用3-4 GB。
我执行了以下任务,但没有用
但是当服务器(机器)重新启动时。sql服务器运行良好,CPU使用恢复正常。
发布于 2012-11-28 05:50:25
尝试使用Glenn的SQL诊断查询中与CPU相关的DMV查询。实际上,我建议您运行所有诊断查询,因为CPU利用率高可能是由于实例配置方式、查询编写方式等方面的问题造成的。
Server性能站点上的这是另一篇文章,这可能有助于您排除故障。
发布于 2012-11-28 19:34:08
编写一个查询来查看Server的管理视图并报告每个繁忙的进程正在做什么并不太困难。这应该会让您找到一个需要大量CPU时间的连接。如果他们正在执行一个查询,您可以改进该查询;或者,如果他们正在进行清理或系统级别的工作,您可以工作来解决这个问题。这个查询将向您显示运行的内容和所花费的CPU时间,将最多的CPU排序到最低。
请注意,查询返回活动结果。如果每一行运行两次,那么每次都会得到不同的结果,因为第二次运行时会显示服务器的活动状态。另一方面,这是很好的:连续两次运行应该会使某些查询或连接运行很长时间,并给您带来麻烦。
如果CPU占用的时间不太清楚,您应该向我们报告这个查询的一些输出,这样我们就可以继续帮助您诊断问题。
SELECT
cpu_time, total_elapsed_time,
session_Id, [DatabaseName] = DB_NAME(sp.dbid), Hostname, [User] = nt_username,
[Status] = ER.status, [WaitType] = wait_type,
[QueryText] = SUBSTRING (QT.text, ER.statement_start_offset/2, (CASE WHEN ER.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), QT.text)) * 2
ELSE ER.statement_end_offset END - ER.statement_start_offset)/2),
[Parent Query] = qt.text, [Program] = program_name, start_time
FROM sys.dm_exec_requests AS ER
INNER JOIN sys.sysprocesses AS SP ON ER.session_id = SP.spid
CROSS APPLY sys.dm_exec_sql_text(ER.sql_handle) AS QT
WHERE session_Id <> @@SPID
ORDER BY cpu_time DESC, total_elapsed_time DESC ;发布于 2012-11-28 23:00:09
您的SQL Server的统计数据可能正在老化,或者您对参数嗅探有问题。
如果问题是统计数据正在变老,那么更新统计数据就可以了。如果问题是参数嗅探,那么刷新SQL Server的缓存,以便将错误的计划从其中清除出来,就会奏效。
无论是哪一种情况(或者问题是什么),您都需要通过诊断和故障排除来找出问题的原因,然后解决问题。
https://dba.stackexchange.com/questions/29405
复制相似问题