SQL Server 2014下Database Mail Engine进程消耗大量CPU资源
2020-03-12 23:36 潇湘隐者 阅读(784) 评论(0) 编辑 收藏 举报
今天发现监控的一个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

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2019-03-12 阿里云RDS for SQL Server测试吐槽
2018-03-12 Azure SQL Virtual Machine报Login failed for user 'NT Service\SqlIaaSExtension'. Reason: Could not find a login matching the name provided
2017-03-12 Linux下随机生成密码的命令总结
2014-03-12 Linux下Oracle 10.2.0.1升级到10.2.0.4总结
2014-03-12 深入理解Linux修改hostname
2011-03-12 Log4net 配置使用总结(一)