操作場景
SQL限流是指通過設置語句類型、關鍵字等匹配SQL語句,當所匹配的SQL語句超過設置的最大并發數時,數據庫實例會拒絕執行此SQL。從而解決SQL并發數過高導致的實例不穩定問題。
可能引起SQL并發過高的場景有:
業務流量突增:出現緩存穿透、異常調用等情況,導致某類SQL并發數急劇上升。
慢查詢堆積:未創建索引的SQL被大量調用,出現大量慢SQL,影響正常業務。
版本約束限制
SQL限流功能對于不同實例類型的版本約束請參見下表。
表 SQL限流版本約束
| 大版本 | 主實例小版本 | 只讀實例小版本 | 只讀實例單獨設置規則 |
|---|---|---|---|
| 5.6 | ≥ 5.6.50.3 | ≥ 5.6.51.6 | 暫不支持 |
| 5.7 | ≥ 5.7.31.4 | ≥ 5.7.37.1 | ≥ 5.7.38.221000 |
| 8.0 | ≥ 8.0.25.1 | ≥ 8.0.25.1 | 暫不支持 |
下表中的RDS for MySQL實例,使用SQL限流功能對root用戶的請求不生效。
表 root用戶請求不受SQL限流限制的版本
| 大版本 | 主實例小版本 |
|---|---|
| 5.6 | ≥ 5.6.51.4 |
| 5.7 | 5.7.33.1 ≤ 版本 < 5.7.43.231000 |
| 8.0 | 8.0.25.1 ≤ 版本 < 8.0.28.231000 |
建議RDS for MySQL小版本升級內核到最新版本,SQL限流體驗更佳,請參見升級RDS for MySQL內核小版本。
功能限制
最多可配置100條限流規則。
SQL限流功能當前僅支持SELECT、UPDATE、DELETE、INSERT關鍵字。
MySQL5.7(>= 5.7.44.240100)或MySQL8.0(>= 8.0.32.240100)支持“INSERT”類型限流規則,如需使用該功能,請聯系客服申請。
當SQL語句匹配多條限流規則時,優先生效最新添加的規則,之前的規則不再生效。
在添加SQL限流規則之前,已經開始執行的SQL語句,不會被記入并發數。
若復制時延過大,針對只讀實例,新增或刪除限流規則不會立刻生效。
系統表不受SQL限流的限制。
不涉及數據查詢的SQL不受限流的限制,例如:select sleep(***);
暫不支持對存儲過程、觸發器、函數內的SQL做限流設置。
您可以在DAS執行如下SQL查看SQL限流規則的執行情況:select * from information_schema.rds_sql_filter_info;
當設置過多限流規則時,對性能有一定影響,使用后請刪除多余的規則。
SQL限流規則不支持約束系統庫。
5.6.51.4以下內核版本、5.7.33.5以下內核版本、以及8.0.25.220700以下內核版本的實例限流規則不區分用戶類型,配置限流規則時建議包含表名,單獨配置SELECT關鍵字會影響功能使用。
操作步驟
步驟 1 登錄管理控制臺。
步驟 2 單擊管理控制臺左上角的 ,選擇區域。
步驟 3 選擇“數據庫 > 關系型數據庫”。進入關系型數據庫信息頁面。
步驟 4 在“實例管理”頁面,選擇目標實例,單擊實例名稱,進入實例的“基本信息”頁簽。
步驟 5 在左側導航欄選擇“智能DBA助手 > 歷史診斷”。
步驟 6 選擇“全量SQL > SQL限流”。
步驟 7 打開 ,開啟SQL限流開關。
說明
SQL限流開關打開后,限流規則才能生效。
步驟 8 單擊“新建SQL限流規則”,配置SQL限流規則參數,參數說明請參見下表。
表 SQL限流規則參數
| 參數項 | 說明 |
|---|---|
| SQL類型 | 支持選擇四種類型:SELECT、UPDATE、DELETE、INSERT。 |
| 關鍵字 | 最多支持128個關鍵字,不區分大小寫。支持以下兩種方式輸入關鍵字。
關鍵字根據順序匹配SQL語句。例如:a~and~b只會匹配*** a>1 and b>2,而不會匹配*** b>2 and a>1。 單個關鍵字首尾的空白字符會被忽略,包括' '、'\n'、'\r'、'\t'等。 |
| 最大并發數 | 輸入最大并發數,與關鍵字匹配的SQL語句如果超過最大并發數會被拒絕執行。取值范圍為0~1000000000。 |
| kill滿足規則的已有會話 | 勾選此選項后,會結束所有受SQL限流控制的賬戶所產生的會話。 root用戶不受SQL限流限制的版本詳見表 root用戶請求不受SQL限流限制的版本。 |
步驟 9 確認無誤后,單擊“確定”。
----結束
后續操作
如果不需要此條SQL限流規則,在SQL限流列表的操作列單擊“刪除”并“確定”。