天天看點

CloudDBA新功能上線--SQL過濾/限制/防火牆1 前言2 功能描述3 對業務的影響4 适用場景5 使用方式6 注意事項

1 前言

CloudDBA是阿裡雲資料庫團隊開發的智能診斷和優化平台,可以幫助使用者更好使用阿裡雲資料庫。

CloudDBA不斷提升算法和規則,更好的比對更多使用者場景,剛剛上線了SQL過濾功能,用來解決某類SQL給系統帶來的沖擊。

2 功能描述

比對使用者設定的關鍵字和并發數,對某類SQL(SELECT/UPDATE/DELETE)進行按并發數限流,當這一類SQL的并發小于并發數的進到Server層,大于并發數的丢棄。

該功能隻能用來救急,不适合長時間運作。

3 對業務的影響

3.1 收益

限制了問題SQL後,保障DB Server端能正常響應正常業務的語句,保障大部分的業務正常運轉

3.2 弊端

如果設定了SQL防火牆,該SQL被限制後,應用端會收到1317錯誤,即

query execution was interrupted           

4 适用場景

如果業務方能夠接受舍小(小部分業務損失)保大(大部分業務正常運轉),可以進行限流;

如果不能接受上述報錯,就要接受整個業務被拖垮的可能。

4.1 能解決的場景

4.1.1 某類SQL并發急劇上升,影響正常業務

比如緩存穿透,或者異常調用,可能會造成原來并發不大的SQL語句,并發量突然上升

4.1.2 有資料傾斜SQL,影響正常業務

比如大促時拉取某個特别大的資料,造成整體系統繁忙

4.1.3 未建立索引SQL,影響正常業務

比如新上線SQL調用量特别大,又沒有建立索引,造成整體系統繁忙

4.2 處理誤區

4.2.1 切換主備

以前碰到上述情況,見有的運維人員是切換主備嘗試解決上述問題,主備的配置是一樣的,如果主庫有問題,同樣的請求到備庫也是同樣的問題,是以切換是解決不了問題的。

4.2.2 kill問題語句

kill語句是可以減少系統壓力,未嘗不是一種處理手段。但是,請求是不斷進來的,不停kill語句手都酸了吧?

4.3 可以嘗試的解決方法

上面提到這個功能隻是應急手段那麼如何才能解決該類問題呢?

  • 提高緩存命中率
  • 使用隻讀執行個體
  • 快速加索引

5 使用方式

5.1 路徑

RDS控制台->找到具體執行個體->CloudDBA->問題診斷->SQL過濾

CloudDBA新功能上線--SQL過濾/限制/防火牆1 前言2 功能描述3 對業務的影響4 适用場景5 使用方式6 注意事項

5.2 找到要限制的SQL語句

通過"問題診斷"裡面,觀察到某類SQL執行特别慢,并發又特别多時,這條語句可能就是問題SQL,經過再三确認(根據經驗,跟業務開發,跟老闆)後就可以限制并發啦。

例如:

CloudDBA新功能上線--SQL過濾/限制/防火牆1 前言2 功能描述3 對業務的影響4 适用場景5 使用方式6 注意事項

想限制下面這類語句:

SELECT * FROM sbtest4 WHERE top_cmt_id=99738 AND status in (1,3)  and parent_cmt_id >= 0 order by add_time desc limit 0,20           

就要執行下面的步驟

5.3 建立過濾規則

5.3.1 SQL類型

是限制SELECT語句還是限制UPDATE語句還是限制DELETE語句,安全起見預設支援SELECT語句,建議您也優先設定SELECT語句

5.3.2 最大并發度

該次限制的SQL最大允許在Server端跑多少個

5.3.3 限流時間

允許SQL過濾最大執行時間;超過了指定時間,就會自動終止該限制

5.3.4 SQL關鍵詞

SQL過濾的比對關鍵詞,多個關鍵詞之間以~分隔,不要有空格之類的特殊字元

接着上面的例子,SQL關鍵詞我可以這樣拼寫

SELECT~FROM~sbtest4~WHERE~top_cmt_id~status~parent_cmt_id~order~add_time~desc           
CloudDBA新功能上線--SQL過濾/限制/防火牆1 前言2 功能描述3 對業務的影響4 适用場景5 使用方式6 注意事項

5.4 重置/終止過濾規則

當遇到設定規則錯誤,或者想提前終止SQL過濾,可以執行該操作。

CloudDBA新功能上線--SQL過濾/限制/防火牆1 前言2 功能描述3 對業務的影響4 适用場景5 使用方式6 注意事項

5.5 檢視過濾曆史記錄

凡是對該執行個體執行過SQL過濾功能的,都可以在這裡查到記錄,友善排查問題。

CloudDBA新功能上線--SQL過濾/限制/防火牆1 前言2 功能描述3 對業務的影響4 适用場景5 使用方式6 注意事項

6 注意事項

  • 該功能隻能用來救急,不适合長時間運作
  • 安全起見預設支援SELECT語句,建議您也優先限制SELECT語句
  • 該功能隻能運作在MySQL 5.6版本
  • 該功能是核心層面上的改進,無論是使用高安全鍊路還是普通鍊路都可以使用
  • 可以設定多個SQL過濾(根據不同的關鍵詞)
  • 如果同一類型的SQL關鍵詞設定了多次,限制的并發按這幾個并發的和限制
  • 要限制的SQL語句比對越嚴格越精準,對業務影響最小

如果設定的不夠精準,例如SQL關鍵詞是

SELECT~FROM~sbtest4           

那比對上述規則的SQL語句,哪怕是正常業務的,也可能被限制掉了

  • 被限制後的SQL在應用端會出現
1317 query execution was interrupted           
  • 該限制隻對被設定的執行個體生效,不影響主賬号下面的其他執行個體
  • 該限制規則隻對新連結有效,如果想使用該規則,在設定過規則後,需要把老連結手動kill(在CloudDBA裡可做)

如果您在使用CloudDBA過程中有什麼問題,或者好建議,歡迎進群

CloudDBA新功能上線--SQL過濾/限制/防火牆1 前言2 功能描述3 對業務的影響4 适用場景5 使用方式6 注意事項