慢SQL是比較致命的影響系統穩定性的因素之一。針對此類場景,AHAS應用防護提供了SQL級別的識別與防護,您可以根據監控詳情為慢SQL配置流控降級規則保障系統的穩定性。本文介紹針對慢SQL如何設置應用防護。

背景信息

系統中出現慢SQL可能會導致CPU、負載異常和系統資源耗盡等情況。嚴重的慢SQL發生后可能會拖垮整個數據庫,對線上業務產生阻斷性的風險。線上生產環境出現慢SQL可能原因如下:

  • 網絡速度慢、內存不足、I/O吞吐量小、磁盤空間被占滿等硬件原因。
  • 沒有索引或者索引失效。
  • 系統數據過多。
  • 在項目初期沒有對SQL的性能做好考量。

使用AHAS應用防護識別慢SQL并為其配置流控降級規則的具體操作流程如下:

接入AHAS應用防護 > 查看監控 > 配置慢SQL防護規則

步驟一:接入AHAS應用防護

AHAS應用防護通過自動檢測常見的DAO類、JDBC驅動類等自動識別應用中的SQL語句,您可以通過Java Agent或者Java SDK兩種接入方式來實現對SQL的監控和攔截。

說明 其中Java Agent接入方式目前支持MySQL JDBC和Oracle JDBC驅動,SDK接入方式目前支持MyBatis框架下的SQL識別。第三方組件和框架的版本支持情況詳見支持組件列表

將應用接入AHAS請參見接入應用方式

步驟二:查看監控

將應用接入AHAS應用防護服務后,您可以監控應用和資源API維度的實時數據(細化至秒級),從而評估系統的整體表現,并為流控降級規則的配置提供重要依據。具體監控指標包括QPS、響應時間、流控降級接口數等。

  1. 登錄AHAS控制臺,在控制臺左上角選擇應用接入的地域。
  2. 在控制臺左側導航欄中選擇流量防護 > 應用防護
  3. 應用列表頁面單擊目標應用的資源卡片。
  4. 應用概覽頁面查看應用的限流指標詳情、QPS熱力圖等情況。
    圖 1. 應用概覽
    應用概覽.png
  5. 在左側導航欄單擊接口詳情,在接口詳情頁面查看每條SQL語句的調用及執行情況。

步驟三:配置慢SQL防護規則

根據AHAS自動識別的SQL語句,可以對出現慢SQL的應用配置線程數維度的流控或降級規則,當出現慢SQL調用時限制同一時刻執行的SQL數量,防止過多的慢SQL語句執行把資源耗盡。

流控規則

針對慢SQL防護的流控規則的統計維度有當前接口和關聯接口,具體配置,請參見配置流控規則

  • 當前接口:在該模式下,閾值配置為當前SQL資源,超過設置的值后多余的請求將被拒絕。
    圖 2. 當前接口
    1
  • 關聯接口:閾值配置為關聯SQL資源,關聯的資源請求超過設置的值之后,該資源的調用將被攔截。
    圖 3. 關聯接口關聯接口

降級規則

慢SQL防護的還可以使用降級規則,根據SQL執行的RT設置對應的閾值以及時間窗口,超過指定的RT值后在時間窗口內SQL執行將被降級,拋出包裝好的異常。具體操作,請參見配置熔斷規則

圖 4. 降級規則
降級規則

資源被流控降級后會報BlockException類異常(限流會拋流控異常FlowException,降級會拋出降級異常DegradeException),您可以根據異常信息進行后續業務處理。