欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQL Server 2014下Database Mail Engine进程消耗大量CPU资源

程序员文章站 2022-06-17 21:54:38
今天发现监控的一个SQL Server数据库实例的CPU有些异常,如下所示,系统消耗的CPU(O/S CPU Utilization)和数据库实例消耗的CPU(Instance CPU Utilization)有较大出入,登录服务器检查,发现Database Mail Engine进程消耗了20%作... ......

 

今天发现监控的一个sql server数据库实例的cpu有些异常,如下所示,系统消耗的cpu(o/s cpu utilization)和数据库实例消耗的cpu(instance cpu utilization)有较大出入,登录服务器检查,发现database mail engine进程消耗了20%作业的cpu资源。而且是持续消耗这么多cpu资源。

 

 

 

 

 

首先我想的是数据库是否有狂发邮件的情况呢? 因为之前遇到过相关案例,由于开发人员更新脚本引起的一个逻辑bug,导致短时间狂发邮件,从而引起这个database mail engine 进程消耗大量的cpu资源,用下面脚本检查。发现一小时内最多发大概200封邮件的样子,所以排除了这个情况

 

select convert(varchar(13), send_request_date, 120)
      ,count(*) 
from msdb.dbo.sysmail_allitems with(nolock)
where send_request_date >= convert(datetime, '2020-01-27 00:00:00', 120)
  and send_request_date <= convert(datetime, '2020-03-14 00:00:00', 120)
group by convert(varchar(13), send_request_date, 120)
order by convert(varchar(13), send_request_date, 120);

 

 

 

2: 检查databasemail的错误日志和系统错误日志没有发现异常情况。

 

3: bug引起的。

 

    官方文档有介绍,在sql server 2016中 database mail在发送大量邮件后,可能导致较高的cpu利用率。 但是这个数据库实例是sql server 2014(12.0.5000.0),虽然官方文档没有找到sql server 2014下有这个bug的相关资料,但是以微软的尿性,基本上也很有可能就是这个bug。由于缺少相关文档,有可能当前版本还没有发现这个bug。所以可能根本没有fix掉这个bug(我查了一下所有的补丁列表,完全没有提及这个)。

 

    https://support.microsoft.com/en-nz/help/3197879/fix-sql-server-2016-database-mail-causes-high-cpu-usage-after-many-ema

 

    而且网上似乎也有一些网友碰到相同的案例。

 

 

 

解决方案

 

如果是sql server 2016,打上补丁cumulative update 2 for sql server 2016 sp1后即可解决。但是sqlserver 2014下,需要通过重启邮件服务临时解决问题。

 

exec msdb.dbo.sysmail_stop_sp

 

exec msdb.dbo.sysmail_start_sp