資料庫自治服務DAS(Database Autonomy Service)提供SQL限流功能。您可以通過SQL限流來控制資料庫請求訪問量和SQL並發量,保障服務的可用性。本文將介紹如何使用SQL限流功能。
前提條件
支援的資料庫引擎為:
RDS MySQL 5.6、5.7、8.0。
RDS PostgreSQL 13及以上。
說明PostgreSQL 13:核心小版本需為20250430或以上。
PostgreSQL 14或15:核心小版本需為20230330或以上。
PostgreSQL 15以上:核心小版本無要求。
PolarDB MySQL版 5.6、5.7、8.0。
PolarDB-X 2.0。
限流提示
目標SQL限流規則建立後,如果應用端使用了包含所有關鍵詞的SQL或者符合模板限流規則的SQL,限流生效時,根據不同的執行個體版本,資料庫系統將會給出對應提示。
最大並發度 | 執行個體版本 | 錯誤碼 | 錯誤提示 |
0或者正整數 |
| 1317 |
|
正整數 | RDS MySQL 5.7(小版本大於等於20200630) | 5041 |
說明 最大並發度為正整數,相關SQL會處於 |
RDS MySQL 8.0 | 7534 | ||
PolarDB MySQL版 5.7 | 3277 | ||
PolarDB MySQL版 8.0 | 7533 | ||
0 | RDS MySQL 5.7(小版本大於等於20200630) | 5042 |
說明 最大並發度為0,直接報錯返回。 |
RDS MySQL 8.0 | 7535 | ||
PolarDB MySQL版 5.7 | 3278 | ||
PolarDB MySQL版 8.0 | 7534 |
通過DAS限流時,若參數
ccl_max_waiting_count值為0,DAS會將其值設定為DAS的預設值(當前預設值為10);若設定值大於0,則直接使用設定值。RDS MySQL 5.7(小版本大於等於20200630)和 RDS MySQL 8.0 執行個體,當設定了
ccl_wait_timeout參數(如果執行個體版本支援該參數),處於Concurrency control waiting狀態的SQL超過此限制後,SQL會繼續執行,不再被限流。PolarDB MySQL版 8.0 執行個體可以設定
ccl_mode參數(如果執行個體版本支援該參數),控制超出並發數量時SQL語句的行為。WAIT(預設):排隊等待。
REFUSE:不等待,直接報錯。
應用情境
情境 | 說明 |
某類SQL並發急劇上升 | 例如緩衝穿透或異常調用,可能會導致SQL並發量突然上升。 |
有資料扭曲SQL | 例如大促時高頻查詢某些熱點資料,導致整體系統繁忙。 |
未建立索引表 | 例如SQL調用量特別大,且沒有建立索引表,導致整體系統繁忙。 |
限流模式
模式 | 說明 | 支援的資料庫 |
關鍵詞限流 | 根據SQL語句中的關鍵詞進行匹配從而限流。 說明 不支援針對某個具體的SQL語句進行限流。 |
|
SQL模板限流 | 輸入SQL樣本,將SQL樣本進行模板化處理擷取對應的SQL模板,對該類型SQL進行限流。 |
|
對SQL模板ID進行匹配從而限流。SQL模板ID可從SQL日誌、會話、EXPLAIN執行結果中獲得。 說明 SQL模板ID是長度為8的十六進位字串。 | PolarDB-X 2.0企業版 | |
執行耗時限流 | 根據SQL執行時間進行限流。建立了該類限流模式的規則後,當指定類型SQL的執行時間超過設定的閾值時,該類型SQL所屬的模板ID會被自動加入到限流規則中,SQL會按照規則指定的並發度執行。 說明 您可以同時設定限流SQL模板ID數量上限,達到上限後,便不再自動對其他SQL建立限流規則。 | PolarDB-X 2.0企業版 |
操作步驟
登入DAS控制台。
在左側導覽列中,單擊智能營運中心 > 執行個體監控。
找到目標執行個體,單擊執行個體ID,進入目標執行個體詳情頁。
在左側導覽列,單擊執行個體會話。
在會話管理頁面,單擊SQL限流。
在彈出窗中單擊建立限流規則。
在彈出的建立限流規則對話方塊中,根據不同的資料庫引擎配置如下參數。
限流模式為關鍵詞限流時,需要配置此參數。
僅以下資料庫引擎支援限流INSERT類型:
RDS MySQL 8.0
PolarDB MySQL版 5.7、8.0
PolarDB-X 2.0
不支援限流
INSERT...SELECT...類型的SQL語句。限流模式為關鍵詞限流時,需要配置此參數。
若您設定多個關鍵詞,則SQL語句中需要同時包含這些關鍵詞才會觸發限流規則,多個關鍵詞間用波浪線(~)分隔,且無順序限制。
例如原始語句為:
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。不支援僅設定
SELECT、INSERT、UPDATE、DELETE為限流關鍵詞,且關鍵詞大小寫敏感(部分早期版本執行個體不區分)。限流模式為SQL模板限流時,需要配置此參數。
在SQL較為複雜情況下,DAS會保證最終SQL模板不變的情況下,對SQL樣本進行最佳化,最佳化後限流效果不會受到影響。
例如輸入為:
select name from das where name = `das` and age = 21 limit 20。模板化為:
select name from das where name = ? and age = ? limit ?。改寫為:
select name from das where name = `param0` and age = `param1` limit 20。限流模式為SQL模板限流時,需要配置此參數。
在SQL較為複雜情況下,DAS會對SQL樣本在保證SQL模板不變的情況下進行模板化,轉換後限流效果不會受到影響。
例如輸入為:
select name from das where name = "das" and age = 21 limit 20。模板化為:
select name from das where name = ? and age = ? limit ?。改寫為:
select name from das where name = "param0" and age = "param1" limit 20。當前僅以下資料庫引擎支援限流
INSERT類型:RDS MySQL 8.0
PolarDB MySQL版 5.7、8.0
PolarDB-X 2.0
不支援限流
INSERT...SELECT...類型的SQL語句。限流模式為關鍵詞限流時,需要配置此參數。
若您設定多個關鍵詞,則SQL語句中需要同時包含這些關鍵詞才會觸發限流規則,多個關鍵詞間用波浪線(~)分隔,且無順序限制。
例如原始語句為:
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。不支援僅設定SELECT、INSERT、UPDATE、DELETE為限流關鍵詞,且關鍵詞大小寫敏感(部分早期版本執行個體不區分)。
限流模式為SQL模板限流時,需要配置此參數。
在SQL較為複雜情況下,DAS會對SQL樣本在保證SQL模板不變的情況下進行模板化,轉換後限流效果不會受到影響。
例如輸入為:
select name from das where name = "das" and age = 21 limit 20。模板化為:
select name from das where name = ? and age = ? limit ?。改寫為:
select name from das where name = "param0" and age = "param1" limit 20。當前僅以下資料庫引擎支援限流
INSERT類型:RDS MySQL 8.0
PolarDB MySQL版 5.7、8.0
PolarDB-X 2.0
不支援限流
INSERT...SELECT...類型的SQL語句。限流模式為關鍵詞限流時,需要配置此參數。
若您設定多個關鍵詞,則SQL語句中需要同時包含這些關鍵詞才會觸發限流規則,多個關鍵詞間用波浪線(~)分隔,且無順序限制。
例如原始語句為:
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。不支援僅設定SELECT、INSERT、UPDATE、DELETE為限流關鍵詞,且關鍵詞大小寫敏感(部分早期版本執行個體不區分)。
單擊提交,完成建立。
SQL限流規則建立完成後,您可以在運行中頁簽查看SQL限流規則的相關資訊。列表中的參數資訊如下:
說明不同的資料庫引擎和限流模式,列表中的參數略有差異。
參數
說明
限流模式
您所選擇的模式。
限流規則
關鍵字限流:限流關鍵字配置資訊。
SQL模板限流:該限流樣本對應的模板ID資訊。
執行耗時限流:配置的執行耗時的執行時間閾值/限流模板SQL的數量。
最大並發度
SQL最大並發數。
最大等待數
限流規則配置的最大等待數。
說明資料庫執行個體為RDS PostgreSQL, 且限流模式為SQL模板限流時,展示此參數。
限流時間(分鐘)
SQL限流的生效時間。
開始時間
限流規則配置時間(生效時間)。
剩餘時間
限流規則失效的剩餘時間。
限流SQL樣本
限流SQL樣本配置。
說明限流模式為SQL模板限流時,展示此參數。
限流模板ID
限流SQL樣本對應模板ID。
說明限流模式為SQL模板限流時,展示此參數。
狀態
運行中規則為啟用狀態。
資料庫
限流SQL資料庫。
說明限流模式為SQL模板限流時,展示此參數。
搜尋路徑
限流SQL對應的搜尋路徑。
說明資料庫執行個體為RDS PostgreSQL, 且限流模式為SQL模板限流時,展示此參數。
匹配SQL數量
限流規則配置下,匹配到的SQL數量。
說明限流模式為SQL模板限流時,展示此參數。
等待SQL數量
限流規則配置下,正在等待SQL數量。
說明限流模式為SQL模板限流時,展示此參數。
操作
關閉或修改限流規則的操作按鈕。
RDS MySQL
參數 | 說明 |
限流模式 | 根據需要選擇限流模式。 |
SQL類型 | 選擇SQL類型,取值如下:SELECT、UPDATE、DELETE、INSERT。 說明 |
資料庫 | SQL限流的資料庫。 說明 限流模式為SQL模板限流時,需要配置此參數。 |
最大並發度 | SQL最大並發數,允許設定的最小值為0。 說明 當滿足限流策略的SQL同時執行,並達到最大並發數時,觸發SQL限流。 |
限流時間 | SQL限流的生效時間。 重要 SQL限流是應急措施,建議您按實際需求設定限流時間長度,用完及時關閉。 |
SQL關鍵詞 | 需要限流的SQL關鍵詞。 說明 |
SQL樣本 | 需要限流的樣本SQL。 說明 |
RDS PostgreSQL
參數 | 說明 |
限流模式 | RDS PostgreSQL僅支援SQL模板限流。 |
資料庫 | 限流SQL的資料庫。 |
搜尋路徑 | 限流SQL的搜尋路徑。 說明 多個路徑間用英文逗號 |
最大並發度 | SQL最大並發數,允許設定的最小值為0。 說明 當滿足限流策略的SQL同時執行,並達到最大並發數時,觸發SQL限流。 |
最大等待數 | 最大等待數。 |
限流時間 | SQL限流的生效時間。 重要 SQL限流是應急措施,建議您按實際需求設定限流時間長度,用完及時關閉。 |
SQL樣本 | 需要限流的樣本SQL。 說明 |
PolarDB MySQL版
參數 | 說明 |
限流模式 | 根據需要選擇限流模式。 |
SQL類型 | 選擇SQL類型,取值如下: 說明 |
最大並發度 | SQL最大並發數,允許設定的最小值為0。 說明 當滿足限流策略的SQL同時執行,並達到最大並發數時,觸發SQL限流。 |
資料庫 | 限流SQL的資料庫。 說明 限流模式為SQL模板限流時,需要配置此參數。 |
限流時間 | SQL限流的生效時間。 重要 SQL限流是應急措施,建議您按實際需求設定限流時間長度,用完及時關閉。 |
SQL關鍵詞 | 需要限流的SQL關鍵詞。 說明 |
SQL樣本 | 需要限流的樣本SQL。 說明 |
PolarDB-X 2.0
參數 | 說明 |
限流模式 | 根據需要選擇限流模式。 |
SQL類型 | 選擇SQL類型,取值如下: 說明 |
最大並發度 | SQL最大並發數,允許設定的最小值為0。 說明 當滿足限流策略的SQL同時執行,並達到最大並發數時,觸發SQL限流。 |
限流時間 | SQL限流的生效時間。 重要 SQL限流是應急措施,建議您按實際需求設定限流時間長度,用完及時關閉。 |
SQL關鍵詞 | 需要限流的SQL關鍵詞。 說明 |
SQL模板ID | 需要限流的SQL模板ID,模板ID為長度為8的十六進位字串, 多個SQL模板ID間用英文逗號 說明 PolarDB-X為企業版,並且限流模式為SQL模板限流時,需要配置此參數。 |
最小SQL執行耗時 | SQL執行時間的閾值,當SQL的執行時間大於設定的閾值時,系統會將該類型SQL所屬的SQL模板ID加入到限流規則中。 說明 PolarDB-X為企業版,並且限流模式為執行耗時限流時,需要配置此參數。 |
限流SQL ID數量上限 | 通過執行耗時限流的SQL模板ID數量上限,達到上限後,系統不再對其他執行時間大於設定閾值的SQL建立限流規則。 說明 PolarDB-X為企業版,並且限流模式為執行耗時限流時,需要配置此參數。 |
被限流SQL的資料庫帳號 | 被限流SQL所屬的資料庫帳號。 說明 限流模式為關鍵詞限流或SQL模板限流時,需要配置此參數。 |
相關文檔
相關API
API | 描述 |
啟用SQL限流。 | |
關閉指定限流規則。 | |
關閉全部正在執行的限流規則。 | |
擷取正在執行的限流規則。 | |
擷取正在執行或被觸發過的限流規則。 | |
根據SQL語句產生限流關鍵詞。 |