全部產品
Search
文件中心

Database Autonomy Service:SQL限流

更新時間:Aug 30, 2025

資料庫自治服務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或者正整數

  • RDS MySQL 5.6

  • RDS MySQL 5.7(小版本早於20200630)

  • PolarDB MySQL版 5.6

1317

query execution was interrupted

正整數

RDS MySQL 5.7(小版本大於等於20200630)

5041

Concurrency control waiting count exceed max waiting count

說明

最大並發度為正整數,相關SQL會處於Concurrency control waiting(並發控制等待)狀態,直至等待數量超過參數ccl_max_waiting_count的值(如果執行個體版本支援該參數)時,返回提示。

RDS MySQL 8.0

7534

PolarDB MySQL版 5.7

3277

PolarDB MySQL版 8.0

7533

0

RDS MySQL 5.7(小版本大於等於20200630)

5042

Concurrency control refuse to execute query

說明

最大並發度為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語句進行限流。

  • RDS MySQL

  • PolarDB MySQL版

  • PolarDB-X 2.0

SQL模板限流

輸入SQL樣本,將SQL樣本進行模板化處理擷取對應的SQL模板,對該類型SQL進行限流。

  • RDS MySQL 8.0版本且核心小版本為20230630及以上。

  • RDS PostgreSQL

    • 13版本且核心小版本為20250430及以上。

    • 14版本且核心小版本為20230330及以上。

    • 15版本且核心小版本為20230330及以上。

    • 15以上版本。

  • PolarDB MySQL版

    • 8.0.1版本且核心小版本為8.0.1.1.31及以上。

    • 8.0.2版本且核心小版本為8.0.2.2.12及以上。

對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企業版

操作步驟

  1. 登入DAS控制台

  2. 在左側導覽列中,單擊智能營運中心 > 執行個體監控

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

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

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

  6. 在彈出窗中單擊建立限流規則

  7. 在彈出的建立限流規則對話方塊中,根據不同的資料庫引擎配置如下參數。

  8. RDS MySQL

    參數

    說明

    限流模式

    根據需要選擇限流模式

    SQL類型

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

    說明
    • 限流模式關鍵詞限流時,需要配置此參數。

    • 僅以下資料庫引擎支援限流INSERT類型:

      • RDS MySQL 8.0

      • PolarDB MySQL版 5.7、8.0

      • PolarDB-X 2.0

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

    資料庫

    SQL限流的資料庫。

    說明

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

    最大並發度

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

    說明

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

    限流時間

    SQL限流的生效時間。

    重要

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

    SQL關鍵詞

    需要限流的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模板限流時,需要配置此參數。

    • 在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

    RDS PostgreSQL

    參數

    說明

    限流模式

    RDS PostgreSQL僅支援SQL模板限流

    資料庫

    限流SQL的資料庫。

    搜尋路徑

    限流SQL的搜尋路徑。

    說明

    多個路徑間用英文逗號,分隔,預設為information_schema,public

    最大並發度

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

    說明

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

    最大等待數

    最大等待數。

    限流時間

    SQL限流的生效時間。

    重要

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

    SQL樣本

    需要限流的樣本SQL。

    說明
    • 限流模式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

    PolarDB MySQL版

    參數

    說明

    限流模式

    根據需要選擇限流模式

    SQL類型

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

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

      • RDS MySQL 8.0

      • PolarDB MySQL版 5.7、8.0

      • PolarDB-X 2.0

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

    最大並發度

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

    說明

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

    資料庫

    限流SQL的資料庫。

    說明

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

    限流時間

    SQL限流的生效時間。

    重要

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

    SQL關鍵詞

    需要限流的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模板限流時,需要配置此參數。

    • 在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

    PolarDB-X 2.0

    參數

    說明

    限流模式

    根據需要選擇限流模式

    SQL類型

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

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

      • RDS MySQL 8.0

      • PolarDB MySQL版 5.7、8.0

      • PolarDB-X 2.0

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

    最大並發度

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

    說明

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

    限流時間

    SQL限流的生效時間。

    重要

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

    SQL關鍵詞

    需要限流的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模板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模板限流時,需要配置此參數。

  9. 單擊提交,完成建立。

    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模板限流時,展示此參數。

    操作

    關閉修改限流規則的操作按鈕。

相關文檔

相關API

API

描述

EnableSqlConcurrencyControl

啟用SQL限流。

DisableSqlConcurrencyControl

關閉指定限流規則。

DisableAllSqlConcurrencyControlRules

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

GetRunningSqlConcurrencyControlRules

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

GetSqlConcurrencyControlRulesHistory

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

GetSqlConcurrencyControlKeywordsFromSqlText

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