数据库服务器CPU使用率高的通用分析和处理

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

数据库服务器CPU使用率高的通用分析和处理

【症状描述】

数据库服务器的CPU使用率持续维持在高位运行,全员使用系统卡慢,平时使用很快的功能,也出现变慢很多的情况,如下图,查看任务管理器,如下图所示:

发现占用资源的是数据库服务的进程sqlserver.exe。

如若不是,系统管理员可按占用资源的进程名称,百度搜索方案,做通用的检查处理。

 

 




 

【问题分析与排查】

1. 查看资源被谁用了。

在数据库服务器,一般出现CPU使用情况持续维持在高位(大于90%)运行的情况,引发的进程很可能是sqlserver.exe进程,可查看任务管理器进行核实。

 

2. 查看资源何时被占用的。

系统管理员登录管理中心,通过管理员主页,分析CPU使用率暴涨的时间点

系统管理员登录业务中心,结合上机操作日志,分析是否有业务操作,会用到大量的CPU资源来做计算。

分析CPU持续高位运行,是否有这些操作进行:成本计算,存货核算,结账,MRP运算,大数据量的引出等

 

另外,大数据量的引出的情况,可通过查看引出操作记录列表,根据记录的情况来判断。

 

【精确分析与处理】

通过查询耗费CPU资源排名查询语句,对结果进行分析,获取排名信息的sql语句如下:

SELECT TOP(20) DB_NAME(t.[dbid]) AS [Database Name], LEFT(t.[text], 50) AS [Short Query Text], 

qs.total_worker_time AS [Total Worker Time], qs.min_worker_time AS [Min Worker Time],

qs.total_worker_time/qs.execution_count AS [Avg Worker Time],

qs.max_worker_time AS [Max Worker Time],

qs.min_elapsed_time AS [Min Elapsed Time],

qs.total_elapsed_time/qs.execution_count AS [Avg Elapsed Time],

qs.max_elapsed_time AS [Max Elapsed Time],

qs.min_logical_reads AS [Min Logical Reads],

qs.total_logical_reads/qs.execution_count AS [Avg Logical Reads],

qs.max_logical_reads AS [Max Logical Reads],

qs.execution_count AS [Execution Count], qs.creation_time AS [Creation Time]

 ,t.[text] AS [Query Text], qp.query_plan AS [Query Plan] -- uncomment out these columns if not copying results to Excel

FROM sys.dm_exec_query_stats AS qs WITH (NOLOCK)

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 OPTION (RECOMPILE);

 

 

根据耗费资源的语句分析,判断出标准的功能还是二开的功能,是哪个业务应用导致的情况。

 

下面我们以一个案例的方式进行说明:

由于大表缺少必要的索引,导致查询时引发耗费大量的CPU和磁盘 IO资源。

从上图可看出耗费IO资源的sql语句,可以对语句进行分析判断。

从上图可以看出耗费CPU资源的sql语句,可以对语句进行分析判断。

 

从语句执行结果,我们拖到最右边,有一个执行计划字段,点击进去查看发现

 

对T_KDS_ITEMINRPT表,评估的记录数是1.3亿

 根据评估,由于缺少这个索引,导致的影响是99.9994%。换言之,如果创建这个索引后,可以带来1666倍的提升。

 

一些参考语句:

对T_KDS_ITEMINRPT现有的索引和索引字段情况查看:sp_helpindex T_KDS_ITEMINRPT

 

查询T_KDS_ITEMINRPT记录数:select count(*) from T_KDS_ITEMINRPT

 

查询T_KDS_ITEMINRPT表中FITEMDATAID不重复的记录数:select count(distinct FITEMDATAID) from T_KDS_ITEMINRPT


如果不重复的记录数的值越接近T_KDS_ITEMINRPT记录数,说明这个字段创建索引的使用效果越好。从下图可以看出,FITEMDATAID不重复的记录数也是1.3亿,这个字段根据业务的需要,是有必要创建为索引的。


【常用的分析语句汇总】


 等待-阻塞-耗费CPU与IO资源.zip

 

 


数据库服务器CPU使用率高的通用分析和处理

【症状描述】数据库服务器的CPU使用率持续维持在高位运行,全员使用系统卡慢,平时使用很快的功能,也出现变慢很多的情况,如下图,查看任...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息