全部產品
Search
文件中心

Database Autonomy Service:SQL限流

更新時間:Jul 27, 2024

資料庫自治服務DAS(Database Autonomy Service)提供SQL限流功能。您可以通過SQL限流來控制資料庫請求訪問量和SQL並發量,保障服務的可用性。本文以RDS MySQL為例介紹如何使用SQL限流功能。

前提條件

支援的資料庫引擎為:

  • RDS MySQL 5.6、5.7、 8.0

  • PolarDB MySQL版 5.6、5.7、 8.0

  • PolarDB-X 2.0

應用情境

情境

說明

某類SQL並發急劇上升

例如緩衝穿透或異常調用,可能會導致SQL並發量突然上升。

有資料扭曲SQL

例如大促時拉取某個特別大的資料,導致整體系統繁忙。

未建立索引表

例如SQL調用量特別大,並且沒有建立索引表,導致整體系統繁忙。

限流模式

支援的限流模式如下:

參數

說明

支援的資料庫

通過關鍵詞限流

根據SQL語句中的關鍵詞進行匹配從而限流。

  • RDS MySQL

  • PolarDB MySQL版

  • PolarDB-X 2.0

通過SQL模板ID限流

對SQL模板ID進行匹配從而限流,可從SQL日誌、會話、EXPLAIN執行結果中獲得SQL模板ID。

說明

SQL模板ID是長度為8的16進位字串。

PolarDB-X 2.0

通過執行耗時限流

根據SQL執行時間進行限流。建立了該類限流模式的規則後,當指定類型SQL的執行時間超過設定的閾值時,該類型SQL所屬的模板ID會被自動加入到限流規則中,SQL會按照規則指定的並發度執行。

說明

您可以同時設定限流SQL模板ID數量上限,達到上限後,便不再自動對其他SQL建立限流規則。

PolarDB-X 2.0

操作步驟

  1. 登入DAS控制台

  2. 在左側導覽列中,單擊執行個體監控

  3. 找到目標執行個體,單擊執行個體ID,進入目標執行個體詳情頁。

  4. 在左側導覽列,單擊執行個體會話

  5. 會話管理頁面,單擊SQL限流

    ss

  6. 在彈出的SQL限流對話方塊中,配置如下參數。

    參數

    說明

    限流模式

    根據需要選擇限流模式,詳情請參見限流模式

    SQL類型

    選擇SQL類型,取值如下:SELECTUPDATEDELETEINSERT

    說明
    • 當前支援限流INSERT類型的資料庫引擎:

      • RDS MySQL 8.0

      • PolarDB MySQL版 5.7、8.0

      • PolarDB-X 2.0

    • 不支援限流INSERT...SELECT...類型的SQL語句。

    最大並發度

    SQL最大並發數,允許設定的最小值為1。

    當同時執行的滿足限流策略的SQL數達到最大並發數時觸發SQL限流。

    限流時間

    SQL限流的生效時間。SQL限流是應急措施,建議您按實際需求設定限流時間長度,用完及時關閉。

    SQL關鍵詞

    需要限流的SQL關鍵詞。

    說明

    限流模式通過關鍵詞限流時,需要配置此參數。

    • 若您設定多個關鍵詞,則SQL語句中需要同時包含這些關鍵詞才會觸發限流規則,多個關鍵詞間用波浪線(~)分隔,且無順序限制。

    • 不支援只設定SELECT、UPDATE、DELETE為限流關鍵詞,且關鍵詞大小寫敏感(部分早期版本執行個體不區分)。

    關鍵詞設定舉例:如原始語句為SELECT min(id), max(id) FROM task_event WHERE gmt_modified < '2020-06-21' AND begin_time > '2020-07-09' AND source IN (527) AND id >= 15673 AND id <= 8015673 ,則對應該語句的限流關鍵詞為SELECT~min~id~max~id~FROM~task_event~WHERE~gmt_modified~AND~begin_time~AND~source~IN~AND~id~AND~id

    模板ID

    需要限流的SQL模板ID,多個SQL模板ID間用英文逗號(,)分隔。

    說明

    限流模式通過SQL模板ID限流時,需要配置此參數。

    SQL執行時間

    SQL執行時間的閾值,當SQL的執行時間大於設定的閾值時,系統會將該類型SQL所屬的SQL模板ID加入到限流規則中。

    說明

    限流模式通過執行耗時限流時,需要配置此參數。

    限流SQL ID數量上限

    通過執行耗時限流的SQL模板ID數量上限,達到上限後,系統不再對其他執行時間大於設定閾值的SQL建立限流規則。

    說明

    限流模式通過執行耗時限流時,需要配置此參數。

    被限流SQL的資料庫帳號

    被限流SQL所屬的資料庫帳號。

    說明

    資料庫執行個體為PolarDB-X 2.0,且限流模式通過關鍵詞限流通過SQL模板ID限流時,需要配置此參數。

    說明

    目標SQL限流規則建立後,當應用端使用了同時包含所有關鍵詞的SQL:

    • RDS MySQL 5.6、RDS MySQL 5.7的執行個體和PolarDB MySQL版 5.6的叢集會返回1317錯誤(query execution was interrupted)。

    • RDS MySQL 8.0執行個體、PolarDB MySQL版 5.7和PolarDB MySQL版 8.0叢集會讓相關SQL會處於Concurrency control waiting狀態,直至等待數量超過ccl_max_waiting_count參數的值(如果執行個體版本支援該參數)時,會返回錯誤碼和錯誤描述(Concurrency control waiting count exceed max waiting count),錯誤碼分別是:

      • RDS MySQL 8.0為ERROR 7534 (HY000)

      • PolarDB MySQL版 5.7為ERROR 3277 (HY000)

      • PolarDB MySQL版 8.0為ERROR 7533 (HY000)

      其中,若ccl_max_waiting_count參數值為預設值0時,所有被限流的SQL均會處於Concurrency control waiting狀態,不返回錯誤。通過DAS限流時,若該參數值為0,DAS會將其值設定為DAS的預設值(當前預設值為10);若使用者將其設定為大於0的其他值,DAS不再設定該參數,直接使用使用者的設定。

  7. 單擊建立

    SQL限流規則建立完成後,您可以在運行中頁簽查看SQL限流規則的相關資訊。

    如您需要關閉修改限流規則,可單擊目標規則右側操作欄的關閉修改按鈕。

相關文檔

自動SQL限流

相關API

API

描述

EnableSqlConcurrencyControl

啟用SQL限流。

DisableSqlConcurrencyControl

關閉指定限流規則。

DisableAllSqlConcurrencyControlRules

關閉全部正在執行的限流規則。

GetRunningSqlConcurrencyControlRules

擷取正在執行的限流規則。

GetSqlConcurrencyControlRulesHistory

擷取正在執行或被觸發過的限流規則。

GetSqlConcurrencyControlKeywordsFromSqlText

根據SQL語句產生限流關鍵詞。