系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 数据库 > MsSql > 详细页面

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

时间:2020-03-16来源:电脑系统城作者:电脑系统城

今天发现监控的一个SQL Server数据库实例的CPU有些异常,如下所示,系统消耗的CPU(O/S CPU Utilization)和数据库实例消耗的CPU(Instance CPU Utilization)有较大出入,登录服务器检查,发现Database Mail Engine进程消耗了20%作业的CPU资源。而且是持续消耗这么多CPU资源。
 
clip_image001[12]
 
 
 
clip_image002[12]
 
首先我想的是数据库是否有狂发邮件的情况呢? 因为之前遇到过相关案例,由于开发人员更新脚本引起的一个逻辑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);
 
clip_image003[12]
 
 
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
 
    而且网上似乎也有一些网友碰到相同的案例。
 
https://feedback.azure.com/forums/908035-sql-server/suggestions/33831496-sql-server-2014-database-mail-causes-high-cpu-usag
 
 
解决方案
 
如果是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
 
分享到:

相关信息

  • SQL Server 数据库中的收缩数据库和文件操作

    收缩数据文件通过将数据页从文件末尾移动到更靠近文件开头的未占用的空间来恢复空间,在文件末尾创建足够的空间后,可取消对文件末尾的数据页的分配并将它们返回给文件系统,本文给大家介绍SQL Server 数据库中的收缩数据...

    2023-10-27

  • dbeaver配置SQL server连接实现

    一、需要java jdk环境,我用的比较新 二、dbeaver新建连接SQL server...

    2023-10-27

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载