今天發現監控的一個SQL Server資料庫實體的CPU有些例外,如下所示,系統消耗的CPU(O/S CPU Utilization)和資料庫實體消耗的CPU(Instance CPU Utilization)有較大出入,登錄服務器檢查,發現Database Mail Engine行程消耗了20%作業的CPU資源,而且是持續消耗這么多CPU資源,
![clip_image001[12] clip_image001[12]](https://img.uj5u.com/2020/09/11/56103112040161.png)
![clip_image002[12] clip_image002[12]](https://img.uj5u.com/2020/09/11/56103112040162.png)
首先我想的是資料庫是否有狂發郵件的情況呢? 因為之前遇到過相關案例,由于開發人員更新腳本引起的一個邏輯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] clip_image003[12]](https://img.uj5u.com/2020/09/11/56103112040163.png)
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/7420.html
標籤:SQL Server
上一篇:隨筆記錄--清楚sqlserver r2 的連接記錄
下一篇:如何實作橫縱向同時排序
