非常抱歉,這次故障給您帶來麻煩了,請您諒解。 今天早上 10:54 左右,我們所使用的數據庫服務(阿里雲 RDS 實例 SQL Server 2016 標準版)CPU 突然飆升至 90% 以上,應用日誌中出現大量數據庫查詢超時的錯誤。 Microsoft.Data.SqlClient.SqlException (0x80131904): Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (258): Unknown error 258 我們收到告警通知並確認問題后,在 11:06 啟動了阿里雲 RDS 的主備切換, 11:08 完成切換,數據庫 CPU 恢復正常。但是關鍵時候 docker swarm 總是雪上加霜,在數據庫恢復正常后,部署博客站點的 docker swarm 集群有一個節點出現異常情況,部分請求會出現 50x 錯誤,將這個異常節點退出集群並啟動新的節點后在 11:15 左右才恢復正常。 通過阿里雲 RDS 控制台的 CloudDBA 發現了 CPU 近 100% 期間執行次數異常多的 SQL 語句。 SELECT TOP @__p_1 [ b ] . [ TagName ] AS [ Name ] , [ b ] . [ TagID ] AS [ Id ] , [ b ] . [ UseCount ] , [ b ] . [ BlogId ] FROM [ blog_Tag ] [ b ] WHERE [ b ] . [ BlogId ] = @__blogId_0 AND @__blogId_0 IS NOT NULL AND [ b ] . [ UseCount ] > ? ORDER BY [ b ] . [ UseCount ] DESC 上面的 SQL 語句是 EF Core 3.0 生成的,其中加粗的 IS N...