亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 數據庫 > 
  • 如何解決SQL語句中執行超時引發網站首頁訪問故障的問題

如何解決SQL語句中執行超時引發網站首頁訪問故障的問題

發布時間:2021-07-29 09:46:35 來源:億速云 閱讀:170 作者:小新 欄目:數據庫

這篇文章將為大家詳細講解有關如何解決SQL語句中執行超時引發網站首頁訪問故障的問題,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

故障的情況是這樣的。

故障期間日志中記錄了大量下面的錯誤。

2020-02-03 06:37:24.635 [Error] An unhandled exception has occurred while executing the request./Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddlewareSystem.Data.SqlClient.SqlException (0x80131904): 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 at System.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__126_0(Task`1 result)

數據庫服務器(阿里云 RDS SQL Server 2016 實例)的 CPU 消耗突增。

如何解決SQL語句中執行超時引發網站首頁訪問故障的問題

數據庫服務器的 IOPS 暴增。

如何解決SQL語句中執行超時引發網站首頁訪問故障的問題

通過阿里云 RDS 控制臺的 CloudDBA 可以查看到故障期間獲取首頁博文的 SQL 語句被執行了3萬多次,執行這么多次是由于查詢超時,無法建立緩存,每次請求都要訪問數據庫。

如何解決SQL語句中執行超時引發網站首頁訪問故障的問題

發現故障后,我們通過阿里云 RDS 的主備切換恢復了正常。

經過對故障的排查分析,鎖定的最大嫌疑對象是 SQL Server 參數嗅探(詳見園子里的博文 什么是 SQL Server 參數嗅探)。

對于這種因為重用他人生成的執行計劃而導致的水土不服現象,SQL Server 有一個專有名詞,叫“參數嗅探 parameter sniffing”。

而且我們找到了引發 SQL Server 參數嗅探問題的條件。

在我們的 open api 中提供了獲取首頁博文列表的 web api ,但沒有限制可以獲取的最大博文數,也就是下面的 ItemCount 參數(除了 open api ,其他地方調用時 ItemCount 值都是 20 )。

SELECT TOP (@ItemCount)

假如有人調用 open api 時給 ItemCount 傳了一個很大的值,比如 20000 ,雖然調用的是同樣的 SQL 語句,但由于 ItemCount 的值不同, SQL Server 可能會生成相差很大的執行計劃,對于 ItemCount 20000 性能比較好的執行計劃,對于 ItemCount 20 可能性能極差。如果查詢 ItemCount 20000 時生成的執行計劃被緩存下來,查詢 ItemCount 20 時繼續使用這個執行計劃,就會出現本來好好的 SQL 查詢突然變得性能極差。我們今天遇到的故障很可能就是這個原因,而且故障時就一個 SQL 語句出現問題(正好就這個 SQL 查詢緩存了水土不服的執行計劃),其他都正常,也驗證了這個猜測。

通過這次故障,我們吸取的教訓是一定要在代碼中對 ItemCount 與 PageSize 的最大值進行限制,它不僅僅是帶來不必要的低性能查詢,而且可能會因為 SQL Server 參數嗅探問題拖垮整個數據庫。

關于“如何解決SQL語句中執行超時引發網站首頁訪問故障的問題”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

sql
AI

曲靖市| 微山县| 合肥市| 乐安县| 龙井市| 三门县| 长岛县| 灵台县| 天门市| 随州市| 涪陵区| 万源市| 潍坊市| 兴和县| 宜川县| 凌云县| 涡阳县| 西青区| 峨眉山市| 休宁县| 岳西县| 三原县| 宝丰县| 昌江| 威海市| 宜君县| 博湖县| 睢宁县| 广东省| 东乡| 时尚| 福海县| 凉城县| 库尔勒市| 舒兰市| 静安区| 万年县| 柘城县| 宿迁市| 西吉县| 安宁市|