数据库服务器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使用率高的通用分析和处理
本文2024-09-23 01:17:17发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-144984.html