SQL Server 2014下Database Mail Engine進程消耗大量CPU資源

 

今天發現監控的一個SQL Server數據庫實例的CPU有些異常,以下所示,系統消耗的CPU(O/S CPU Utilization)和數據庫實例消耗的CPU(Instance CPU Utilization)有較大出入,登陸服務器檢查,發現Database Mail Engine進程消耗了20%做業的CPU資源。並且是持續消耗這麼多CPU資源。sql

 

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引發的。app

 

    官方文檔有介紹,在SQL Server 2016中 database mail在發送大量郵件後,可能致使較高的CPU利用率。 可是這個數據庫實例是SQL Server 2014(12.0.5000.0),雖然官方文檔沒有找到SQL Server 2014下有這個Bug的相關資料,可是以微軟的尿性,基本上也頗有可能就是這個Bug。因爲缺乏相關文檔,有可能當前版本尚未發現這個Bug。因此可能根本沒有Fix掉這個Bug(我查了一下全部的補丁列表,徹底沒有說起這個)。spa

 

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

 

    並且網上彷佛也有一些網友碰到相同的案例。code

 

https://feedback.azure.com/forums/908035-sql-server/suggestions/33831496-sql-server-2014-database-mail-causes-high-cpu-usagorm

 

 

解決方案server

 

若是是SQL Server 2016,打上補丁Cumulative Update 2 for SQL Server 2016 SP1後便可解決。可是SQLServer 2014下,須要經過重啓郵件服務臨時解決問題。blog

 

EXEC msdb.dbo.sysmail_stop_sp

 

EXEC msdb.dbo.sysmail_start_sp

相關文章
相關標籤/搜索