SQL2008为什么每天晚上12点CPUdiv 占满屏幕

sql server 导致cpu占有率达到90%多,请问如何解决?
[问题点数:40分,结帖人baitongshida]
sql server 导致cpu占有率达到90%多,请问如何解决?
[问题点数:40分,结帖人baitongshida]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2011年12月 总版技术专家分月排行榜第三2011年9月 总版技术专家分月排行榜第三
2011年6月 MS-SQL Server大版内专家分月排行榜第一
2011年 总版技术专家分年内排行榜第四2010年 总版技术专家分年内排行榜第九2009年 总版技术专家分年内排行榜第八
2011年10月 总版技术专家分月排行榜第一
2011年12月 总版技术专家分月排行榜第三2011年9月 总版技术专家分月排行榜第三
2011年6月 MS-SQL Server大版内专家分月排行榜第一
2016年4月荣获微软MVP荣誉称号2015年4月荣获微软MVP称号2014年4月 荣获微软MVP称号
2016年7月 MS-SQL Server大版内专家分月排行榜第一
2008年 总版技术专家分年内排行榜第二
2010年 总版技术专家分年内排行榜第四2009年 总版技术专家分年内排行榜第五2007年 总版技术专家分年内排行榜第六
匿名用户不能发表回复!|SQLSERVER排查CPU占用高的情况_图文_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
SQLSERVER排查CPU占用高的情况
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩8页未读,
定制HR最喜欢的简历
你可能喜欢SQL 2008 R2 开机后,CPU占用率高,&#%
一台DELL R620服务器,& 至强4核CPU*1, 16G内存, 今天() 10:00起, 服务器运行缓慢, 重启服务器3次,每次的情况就是重启完成后, sql server 就占用约60%~70%的CPU使用率,导致运行缓慢, 如果客户机再开启相应的客户端程序,服务器的CPU占用率为 80%~90%,基本上无法操作,服务器硬件正常,服务器没有做过任何的更改操作,包括系统、硬件、SQL SERVER,
哪位朋友能指导?谢谢
我的邮箱: gdkplsq&&& hotmail.com 的
对 SQL Server不是很熟悉的话,可以用排除法定位问题
1. 你可以先把 SQL 服务停掉,如果 CPU 降下来,说明是 SQL 的问题
2. 进一步,把 SQL 的 TCP 协议停掉, 这样防止客户端连接,只把 SQL 服务启动,SQLAgent服务保持停止
如果这样启动之后,CPU马上上升,则可能是设置有启动SQL时自动运行的存储过程导致的,你可以用下面的语句查下
use master
select * from sys.objects
where type in ('X','P','PC') and ObjectProperty(object_id, 'ExecIsStartup') = 1
要禁用的请,使用 exec master..sp_procoption 'xxx', 'startup', 0
3. 如果没有问题,则启动 SQLAgent 服务,如果启动一段时间之后CPU有问题,则是 Job的问题,你可以看看当前正在运行的Job,并把它们逐个停掉,如果停掉某个Job就好了,则是该Job的问题
4. 如果不是Job的问题,则把SQL的TCP协议启用,然后重启SQL服务,让客户端可以连接,这种情况可以确定是程序使用的某个SQL有问题了,这种情况需要查询进程(sysprocess表)中 CPU 调摄的查询做进一步判断,也可以用Profile跟踪CPU高的操作
已标记为答案
What did sql do that caused high cpu time? You can check with 'sp_who2 active', sounds sql is recovering dbs.
对 SQL Server不是很熟悉的话,可以用排除法定位问题
1. 你可以先把 SQL 服务停掉,如果 CPU 降下来,说明是 SQL 的问题
2. 进一步,把 SQL 的 TCP 协议停掉, 这样防止客户端连接,只把 SQL 服务启动,SQLAgent服务保持停止
如果这样启动之后,CPU马上上升,则可能是设置有启动SQL时自动运行的存储过程导致的,你可以用下面的语句查下
use master
select * from sys.objects
where type in ('X','P','PC') and ObjectProperty(object_id, 'ExecIsStartup') = 1
要禁用的请,使用 exec master..sp_procoption 'xxx', 'startup', 0
3. 如果没有问题,则启动 SQLAgent 服务,如果启动一段时间之后CPU有问题,则是 Job的问题,你可以看看当前正在运行的Job,并把它们逐个停掉,如果停掉某个Job就好了,则是该Job的问题
4. 如果不是Job的问题,则把SQL的TCP协议启用,然后重启SQL服务,让客户端可以连接,这种情况可以确定是程序使用的某个SQL有问题了,这种情况需要查询进程(sysprocess表)中 CPU 调摄的查询做进一步判断,也可以用Profile跟踪CPU高的操作
已标记为答案SQL Server 排查 CPU 占用高的情况 - 博客 - 伯乐在线
我的图书馆
SQL Server 排查 CPU 占用高的情况 - 博客 - 伯乐在线
原文出处: &&&欢迎分享原创到有朋友叫我帮他看一下数据库,操作系统是Windows 2008 R2,数据库是 SQL 位。硬件配置还是比较高的,64G内存,16核CPU,他说服务器运行的是金蝶K3软件,数据库实例里有多个数据库。&现象他说是这几天才出现的,而且在每天的某一个时间段才会出现CPU占用高的情况内存占用不太高,只占用了30个GCPU占用100%&排查方向一般排查都是用下面的脚本,一般会用到三个视图&sys.sysprocesses ,dm_exec_sessions ,dm_exec_requests12345USE masterGO--如果要指定数据库就把注释去掉SELECT * FROM sys.[sysprocesses] WHERE [spid]&50 --AND DB_NAME([dbid])='gposdb'SELECT COUNT(*) FROM [sys].[dm_exec_sessions] WHERE [session_id]&50看一下当前的数据库用户连接有多少然后使用下面语句看一下各项指标是否正常,是否有阻塞,这个语句选取了前10个最耗CPU时间的会话123456789101112131415161718192021SELECT TOP 10[session_id],[request_id],[start_time] AS '开始时间',[status] AS '状态',[command] AS '命令',dest.[text] AS 'sql语句', DB_NAME([database_id]) AS '数据库名',[blocking_session_id] AS '正在阻塞其他会话的会话ID',[wait_type] AS '等待资源类型',[wait_time] AS '等待时间',[wait_resource] AS '等待的资源',[reads] AS '物理读次数',[writes] AS '写次数',[logical_reads] AS '逻辑读次数',[row_count] AS '返回结果行数'FROM sys.[dm_exec_requests] AS der CROSS APPLY sys.[dm_exec_sql_text](der.[sql_handle]) AS dest WHERE [session_id]&50 AND DB_NAME(der.[database_id])='gposdb'&ORDER BY [cpu_time] DESC如果想看具体的SQL语句可以执行下面的SQL语句,记得在SSMS里选择以文本格式显示结果1234567--在SSMS里选择以文本格式显示结果SELECT TOP 10 dest.[text] AS 'sql语句'FROM sys.[dm_exec_requests] AS der CROSS APPLY sys.[dm_exec_sql_text](der.[sql_handle]) AS dest& WHERE [session_id]&50& ORDER BY [cpu_time] DESC&模拟了一些耗CPU时间的动作还有查看CPU数和user scheduler数和最大工作线程数,检查worker是否用完也可以排查CPU占用情况1234--查看CPU数和user scheduler数目SELECT cpu_count,scheduler_count FROM sys.dm_os_sys_info--查看最大工作线程数SELECT max_workers_count FROM sys.dm_os_sys_info查看机器上的所有schedulers包括user 和system通过下面语句可以看到worker是否用完,当达到最大线程数的时候就要检查blocking了对照下面这个表各种CPU和SQLSERVER版本组合自动配置的最大工作线程数CPU数 & 32位计算机 & & &64位计算机&=4 & & & & 256 & & & & & & & & & &5128 & & & & & &288 & & & & & & & & & &57616 & & & & & 352 & & & & & & & & & &70432 & & & & & 480 & & & & & & & & & &96012345678SELECTscheduler_address,scheduler_id,cpu_id,status,current_tasks_count,current_workers_count,active_workers_countFROM sys.dm_os_schedulers如果SQLSERVER存在要等待的资源,那么执行下面语句就会显示出会话中有多少个worker在等待结合[sys].[dm_os_wait_stats]视图,如果当前SQLSERVER里面没有任何等待资源,那么下面的SQL语句不会显示任何结果123456789101112131415161718192021222324SELECT TOP 10[session_id],[request_id],[start_time] AS '开始时间',[status] AS '状态',[command] AS '命令',dest.[text] AS 'sql语句', DB_NAME([database_id]) AS '数据库名',[blocking_session_id] AS '正在阻塞其他会话的会话ID',der.[wait_type] AS '等待资源类型',[wait_time] AS '等待时间',[wait_resource] AS '等待的资源',[dows].[waiting_tasks_count] AS '当前正在进行等待的任务数',[reads] AS '物理读次数',[writes] AS '写次数',[logical_reads] AS '逻辑读次数',[row_count] AS '返回结果行数'FROM sys.[dm_exec_requests] AS der INNER JOIN [sys].[dm_os_wait_stats] AS dows ON der.[wait_type]=[dows].[wait_type]CROSS APPLY sys.[dm_exec_sql_text](der.[sql_handle]) AS dest WHERE [session_id]&50 ORDER BY [cpu_time] DESC比如我当前执行了查询SalesOrderDetail_test表100次,由于表数据非常多,所以SSMS需要把SQLSERVER执行的结果慢慢的取走,造成了ASYNC_NETWORK_IO等待1234USE [AdventureWorks]GOSELECT * FROM dbo.[SalesOrderDetail_test]GO 100&问题源头经过排查和这几天的观察情况,确定是某些表缺失索引导致,现在在这些表上增加了索引,问题解决123456select * from t_AccessControl --权限控制表权限控制select * from t_GroupAccess --用户组权限表用户组权限select * from t_GroupAccessType --用户组权限类表用户组权限类select * from t_ObjectAccess --对象权限表对象权限select * from t_ObjectAccessType --对象权限类型表对象权限类型select * from t_ObjectType --对象类型表对象类型查询CPU占用高的语句1234567891011SELECT TOP 10total_worker_time/execution_count AS avg_cpu_cost, plan_handle,execution_count,(SELECT SUBSTRING(text, statement_start_offset/2 + 1,(CASE WHEN statement_end_offset = -1THEN LEN(CONVERT(nvarchar(max), text)) * 2ELSE statement_end_offsetEND - statement_start_offset)/2)FROM sys.dm_exec_sql_text(sql_handle)) AS query_textFROM sys.dm_exec_query_statsORDER BY [avg_cpu_cost] DESC查询缺失索引1234567891011121314151617181920SELECTDatabaseName = DB_NAME(database_id),[Number Indexes Missing] = count(*) FROM sys.dm_db_missing_index_detailsGROUP BY DB_NAME(database_id)ORDER BY 2 DESC;SELECT TOP 10 [Total Cost] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0) , avg_user_impact, TableName = statement, [EqualityUsage] = equality_columns , [InequalityUsage] = inequality_columns, [Include Cloumns] = included_columnsFROM sys.dm_db_missing_index_groups g INNER JOIN sys.dm_db_missing_index_group_stats s ON s.group_handle = g.index_group_handle INNER JOIN sys.dm_db_missing_index_details d ON d.index_handle = g.index_handleORDER BY [Total Cost] DESC;()定位问题后,新建非聚集索引1234567CREATE NONCLUSTERED INDEX IX_t_AccessControl_F4 ON dbo.t_AccessControl(&&&&FObjectType)include([FUserID], [FAccessType], [FAccessMask]) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]GOdrop index IX_t_AccessControl_F4 on t_AccessControlCPU占用恢复正常跟踪模板和跟踪文件下载,请使用SQL2008R2 版本:files.cnblogs.com/lyhabc/跟踪模板和trace.rar&总结从多次历史经验来看,如果CPU负载持续很高,但内存和IO都还好的话,这种情况下,首先想到的一定是索引问题,十有八九错不了。注意文章开头贴出的客户机器负载情况图
喜欢该文的人也喜欢}

我要回帖

更多关于 篮球场被食客占满 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信