sql server xp_readerrorlog引起的CPU爆满100%

【0】问题操作

我做了一个监控,

--监控十分钟内的错误日志信息

监控语句如下:

--监控十分钟内的错误日志信息

declare   @start_time datetime,@end_time datetime
            set @start_time = DATEADD(minute,-10,GETDATE())
            set @end_time = GETDATE()
            if OBJECT_ID('tempdb..#tmp_error_log') is not null
            drop table #tmp_error_log
            create table #tmp_error_log
            (
            logdate      datetime,
            processinfo  varchar(100),
            info         varchar(8000)
            )
            insert into #tmp_error_log
            exec dbo.xp_readerrorlog 0,1,NULL,NULL,@start_time,@end_time,N'desc'
            select COUNT(1) as num, MAX(logdate) as logdate,info
            from #tmp_error_log
            where (info like '%ERROR%'
            or info like '%WARN%'
            or info like '%FAIL%'
            or info like '%STOP%')
            and info not like '%CHECKDB%'
            and info not like '%Registry startup parameters%'
            and info not like '%Logging SQL Server messages in file%'
            and info not like '%previous log for older entries%'
            group by info

【1】故障信息

我发现,某一个实例上,一直正在运行下面图片的语句;

等待也是等待 MSQL_XP :当某任务正在等待扩展存储过程结束时出现。 SQL Server 使用该等待状态检测潜在的 MARS 应用程序死锁。 该等待将在扩展存储过程调用结束时停止。

dm_exec_requests 查看

  

错误日志大小查看

好像也没有多大,也就60M左右

exec xp_enumerrorlog

  

并行度查看

好像也没有什么问题

  

tempdb查看

如下图:好像也出现一些问题

  

 然后在系统表tempdb.sys.tables里存在,直接select该表名却提示表名不存在(这个应该是正常的,是局部临时表,其他会话无法访问)
用 sysindexes 查看 使用object_name(obj_id),显示null,rows 也显示0

我估计这个有点问题,既然是tempdb的问题,那么重启服务就可以了吧

【3】重启解决

既然推断是tempdb的问题,那么重启服务就可以了吧,重启服务提示重启失败,最终直接重启服务器,解决了。

【总结】

生产环境还是要慎重,不能瞎加东西,尽管已经测过;

我这个在之前的几个主要库测过,效率非常快才敢上,结果还是在这个次重要实例上载了跟头;

原文地址:https://www.cnblogs.com/gered/p/14072608.html