【故障公告】數據庫服務器 CPU 近 100% 引起的故障

很是抱歉,今天上午 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
相關文章
相關標籤/搜索