資料庫自治服務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語句中的關鍵詞進行匹配從而限流。 |
|
通過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 |
操作步驟
登入DAS控制台。
在左側導覽列中,單擊執行個體監控。
找到目標執行個體,單擊執行個體ID,進入目標執行個體詳情頁。
在左側導覽列,單擊執行個體會話。
在會話管理頁面,單擊SQL限流。
在彈出的SQL限流對話方塊中,配置如下參數。
參數
說明
限流模式
根據需要選擇限流模式,詳情請參見限流模式。
SQL類型
選擇SQL類型,取值如下:SELECT、UPDATE、DELETE、INSERT。
說明當前支援限流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不再設定該參數,直接使用使用者的設定。
單擊建立。
SQL限流規則建立完成後,您可以在運行中頁簽查看SQL限流規則的相關資訊。
如您需要關閉或修改限流規則,可單擊目標規則右側操作欄的關閉或修改按鈕。
相關文檔
相關API
API | 描述 |
啟用SQL限流。 | |
關閉指定限流規則。 | |
關閉全部正在執行的限流規則。 | |
擷取正在執行的限流規則。 | |
擷取正在執行或被觸發過的限流規則。 | |
根據SQL語句產生限流關鍵詞。 |