SQL Server2014 alwayson CPU 100%解决方法

判断MS SQLserver实例CPU过高解决方法:

1.登录数据库服务器:

2.查看CPU并行度设置,将其设置为1,可有效释放CPU资源给其他进程,右击实例-->ServerProperties-->Advanced-->Parallelism(调整Max Degreeof Parallelism=1),如下图所示:

3.执行sp_who_lock查看阻塞占用过多CPU资源语句,进行优化:

查看索引缺失:

SELECT 
     DatabaseName = DB_NAME(database_id)
    ,[Number Indexes Missing] = count(*) 
 FROM sys.dm_db_missing_index_details
 GROUP 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_columns
 FROM        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_handle
 ORDER BY [Total Cost] DESC;

4.同时执行执行下面代码观察open的process,对于一直不变的进程进行kill:

dbcc opentran          --多次执行, 如果同一个spid多次出现 , 表示有问题
dbcc inputbuffer(spid) --再次查询spid进程的内容

5.查看活动监视器%Process Time(100%),看看不否有资源等待信息:

6.如果以上方法都不能解决时,运行下面的语句查询正在被等待的资源语句,找到对应的资源等待表,然后运行对应的语句找到该表中所有的锁等待进程,找到源头假死进程,进行kill spid杀掉,以释放资源

SELECT     [Spid] = session_Id, ecid, [Database] = DB_NAME(sp.dbid),
[User] = nt_username, [Status] = er.status,
 [Wait] = wait_type,
 [Individual Query] = 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, Hostname,
                       nt_domain, start_time
FROM      sys.dm_exec_requests er INNER JOIN  sys.sysprocesses sp ON er.session_id = sp.spid
     CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) AS qt
WHERE     session_Id > 50 /* Ignore system spids.*/ AND session_Id NOT IN (@@SPID)


7.下面语句查出来包含所有的等待锁,包含已经没有执行但是没有释放的锁。

select * fromsys.dm_tran_locks where resource_type='OBJECT' and OBJECT_NAME(resource_associated_entity_id)='ACTIVITY'

猜你喜欢

转载自blog.csdn.net/wulinpingailxr/article/details/79409617