很是抱歉,今天上午 10:48 ~ 11:33 期間,咱們所使用的數據庫服務(阿里雲 RDS 實例 SQL Server 2016 標準版)又出現了 CPU 近 100% 問題,由此給您帶來麻煩,請您諒解。html
此次剛開始出現 CPU 近 100% 問題時,沒有形成大的影響,後來有段時間 CPU 降了下來,因爲是訪問高峯,咱們沒有敢當即進行主備切換,但 11:20 以後出現的 CPU 近 100% 問題對網站的正常訪問影響越大越大,11:33 左右咱們進行了主備切換後恢復了正常。數據庫
此次數據庫 CPU 近 100% 期間,從阿里雲 RDS CloudDBA 控制檯看執行最多的是 3 條 SQL 語句,前2條是 EF Core 3.0 生成的包含 "IS NOT NULL" 的 SQL 語句,第3條是一個存儲過程。網站
因爲 .NET Core 3.1 正式版12月初即將發佈,因此在上次故障以後咱們沒有當即將 EF Core 升級至 3.1 Preview 版,如今來看,不能等了,咱們會盡快升級,消除 EF Core 生成的多餘 "IS NOT NULL" 。阿里雲
另外,阿里雲數據庫專家會幫我進一步分析數據庫,看是否會發現更多線索。spa
【更新】3d
通過阿里雲數據庫專家的分析,此次 CPU 近 100% 問題依然是 EF Core 生成的 null checks SQL 語句引發的,此次的罪魁禍首是下面的 SQLcode
... WHERE [b].[BlogID] = @__blogId_0 AND @__blogId_0 IS NOT NULL AND [b].[IsExist] = CAST(? AS bit) AND ([b].[PostType] | @__type_1 = @__type_1 AND ([b].[PostType] | @__type_1 IS NOT NULL AND @__type_1 IS NOT NULL) OR [b].[PostType] | @__type_1 IS NULL AND @__type_1 IS NULL) AND ([b].[PostConfig] & @__config_2 = @__config_2 AND ([b].[PostConfig] & @__config_2 IS NOT NULL AND @__config_2 IS NOT NULL) OR [b].[PostConfig] & @__config_2 IS NULL AND @__config_2 IS NULL) AND [b0].[DiggCount] > ? ORDER BY COALESCE([b0].[DiggCount], ?) DESC