當數據庫存在突發流量導致SQL并發量急劇上升、部分SQL占用大量數據庫資源、或者大量未創建索引的SQL被調用等問題影響正常業務時,需要限制問題SQL的并發度,保障大部分的業務正常運轉。數據庫自治服務DAS支持自動SQL限流,會自動提取SQL特征,通過關鍵詞對問題SQL進行限流。
前提條件
實例為如下版本:
RDS MySQL 8.0 高可用系列
RDS MySQL 5.7 高可用系列
RDS MySQL 5.6 高可用系列
適用場景
自動限流主要應用在以下3種場景:
流量問題:出現緩存穿透或異常調用情況,導致某類SQL并發量急劇上升。
數據問題:存在大訂單數據的賬號,該賬號的相關SQL占用大量數據庫資源。
SQL問題:未創建索引的SQL被大量調用,影響正常業務。
功能限制
自動SQL限流的限流模式是通過關鍵詞限流:
支持的SQL類型有SELECT、UPDATE、DELETE和INSERT。
不支持限流INSERT...SELECT...類型的SQL語句。
僅RDS MySQL 8.0和PolarDB MySQL版 5.7、8.0支持限流INSERT類型的SQL語句。
功能說明
當自動限流規則創建后,應用端使用了同時包含所有關鍵詞的SQL語句時:
RDS MySQL 5.6、RDS MySQL 5.7實例會返回1317錯誤(query execution was interrupted)。
RDS MySQL 8.0實例會讓相關SQL會處于
Concurrency control waiting
狀態,直至等待數量超過ccl_max_waiting_count參數的值(如果實例版本支持該參數)時,會返回錯誤碼和錯誤描述(Concurrency control waiting count exceed max waiting count),錯誤碼為ERROR 7534 (HY000)
。其中,若ccl_max_waiting_count參數值為默認值0時,所有被限流的SQL均會處于
Concurrency control waiting
狀態,不返回錯誤。通過DAS限流時,若該參數值為0,DAS會將其值設置為DAS的默認值(當前默認值為10);若用戶將其設置為大于0的其他值,DAS不再設置該參數,直接使用用戶的設置。
操作步驟
訪問RDS實例列表,在上方選擇地域,然后單擊目標實例ID。
進入自治功能管理頁面,可以通過以下兩種方式進入:
在左側導航欄中,選擇自治服務 > 一鍵診斷 > 自治中心。在自治中心頁,單擊自治功能開關。
在左側導航欄中,選擇自治服務 > 性能趨勢。在性能趨勢頁,單擊自治功能開關。
在自治功能管理 > 自治功能設置頁簽中,開啟自治功能開關,并在優化和限流頁簽勾選自動限流,然后設置如下參數作為自動限流的觸發條件。
與CPU利用率關系為或時,大于等于16。
與CPU利用率關系為且時,大于等于2。
如果發現故障未消除,則自動回滾該限流操作。
自動限流觸發后,限流操作持續的時間不會超過最大限流時間。
若選中同時KILL執行中的異常SQL,則即將被限流的異常SQL也會被終止執行,以便快速恢復實例性能。
單擊確定。
(可選)配置告警模板進行告警訂閱,以便及時了解數據庫實例的自動SQL限流情況。
系統會推薦告警模板并添加對應自治事件的告警規則,您可以依照系統提示進行配置。
選擇需要告警通知的告警聯系組。
單擊添加聯系人,添加新的告警聯系人。
單擊新增聯系組,添加新的告警聯系組。
單擊目標聯系人后的修改或移除,修改或刪除已有聯系人的信息。
詳細操作請參見管理告警聯系人。
確認關聯資源。
單擊提交配置,并在彈出的對話框中確認告警配置。
參數 | 描述 |
CPU利用率大于 | CPU利用率閾值,大于等于70%。 |
活躍會話數量大于 | 活躍會話數閾值。 |
可限流時間段 | 可以進行自動SQL限流的時間段。 |
最大限流時間 | 進行SQL限流的最大時長。 如果最大限流時間設置為0,當數據庫實例狀態滿足自動SQL限流觸發閾值時,會觸發限流,但是會立即失效。若選中同時KILL執行中的異常SQL,則異常SQL會被終止執行。 |
持續時間大于 | 持續時間閾值,CPU利用率與活躍會話數滿足限流閾值的持續時間超過此參數值時,觸發自動SQL限流。 |
例如在可限流時間段內,自定義觸發條件為當CPU使用率大于80%,同時活躍會話數大于64,且該現象持續時間超過2分鐘時觸發自動限流,同時自動開始跟蹤:
查看自動SQL限流歷史
訪問RDS實例列表,在上方選擇地域,然后單擊目標實例ID。
在左側導航欄中,選擇自治服務 > 一鍵診斷。
單擊會話管理頁簽。
在實例會話頁面:
單擊SQL限流:
在運行中頁簽,查看正在執行的限流規則。
在運行結束頁簽,選擇需要查看的時間段,查看限流歷史記錄。
如果在配置自動SQL限流參數時,選中同時KILL執行中的異常SQL,則可以單擊結束會話歷史記錄,查看結束會話的歷史記錄。
相關文檔
相關API
API | 描述 |
采用異步方式,批量設置指定數據庫實例的自動SQL限流配置參數。 | |
獲取指定數據庫實例的自動SQL限流規則。 | |
批量關閉指定數據庫實例的自動SQL限流功能。 |