sql server占用服务器cpu过高

胖墩er 2018-06-26 11:33:46
sql server占用服务器cpu过高,排除网络和硬件问题,监控了cpu的使用状况,正常是百分之20左右,大概十分钟左右会突然变成cpu使用百分之90-100,之后服务器卡死状态,持续二十秒又恢复正常,哪位大神帮忙看看是什么原因出现的这个问题呢?
...全文
821 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
OwenZeng_DBA 2018-06-27
@weixin_42548366
当出现这个问题的时候,第一时间用我这个脚本执行下。
https://blog.csdn.net/z10843087/article/details/76040459
检查数据库中的运行状态,1,检查有没有阻塞,2 检查有没有逻辑读特别高的语句(大于10万)
回复
sywcf 2018-06-27
这种情况,我也会经常遇到.一般时某个语句或存储过程中某句 写的不优化导致的.也包括索引等. 切记,切记:写长语句,尽量不要嵌套.用临时表.
回复
丰云 2018-06-26
sql server提供了大量的管理工具,你完全可以自己查看到底是什么原因。。。。。唉。。。。
回复
吉普赛的歌 2018-06-26
SELECT TOP 10 OBJECT_NAME(qt.objectid, qt.dbId)  AS procName,
DB_NAME(qt.dbId) AS [db_name],
qt.text AS SQL_Full,
SUBSTRING(
qt.text,
(qs.statement_start_offset / 2) + 1,
(
(
CASE statement_end_offset
WHEN -1 THEN DATALENGTH(qt.text)
ELSE qs.statement_end_offset
END
- qs.statement_start_offset
) / 2
) + 1
) AS SQL_Part --统计对应的部分语句
,
qs.creation_time,
qs.last_execution_time,
qs.execution_count,
qs.last_elapsed_time / 1000000 AS lastElapsedSeconds,
qs.last_worker_time / 1000000 AS lastCpuSeconds,
CAST(
qs.total_elapsed_time / 1000000.0 / (
CASE
WHEN qs.execution_count = 0 THEN -1
ELSE qs.execution_count
END
) AS DECIMAL(28, 2)
) AS avgDurationSeconds,
CAST(qs.last_logical_reads AS BIGINT) * 1.0 / (1024 * 1024) * 8060 AS
lastLogicReadsMB,
qs.last_logical_reads,
qs.plan_handle
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS p
WHERE qs.last_execution_time >= CONVERT(CHAR(10),GETDATE(),120)+' 08:00' --今天8点之后的慢SQL
AND qs.last_elapsed_time >= 3 * 1000 * 1000 --只取执行时间大于 3 秒的记录
AND qt.[text] NOT LIKE '%Proc_DBA%'
ORDER BY
qs.last_worker_time DESC
回复
吉普赛的歌 2018-06-26
https://blog.csdn.net/yenange/article/details/77187569

代码多了复制不过来, 你自己进博客去复制, 在你的服务器上执行看看, 到底是哪些 SQL 导致了cpu高?

或者在连接实例上右键, 开启“活动和监视器”:

然后在 CPU 高时观察相关的SQL 即可。
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2018-06-26 11:33
社区公告
暂无公告