歡迎你們前往騰訊雲+社區,獲取更多騰訊海量技術實踐乾貨哦~算法
做者:邢家樹,高級工程師,目前就任於騰訊TEG基礎架構部數據庫團隊。騰訊數據庫技術團隊維護MySQL內核分支TXSQL,100%兼容原生MySQL版本,對內支持微信紅包,彩票等集團內部業務,對外爲騰訊雲CDB for MySQL提供內核版本。
導語:CDBTune是騰訊雲自主研發的數據庫智能性能調優工具。相比於現有業界通用方法,CDBTune無需細分負載類型和積累大量樣本,經過智能學習參與參數調優,得到較好的參數調優效果。數據庫
數據庫系統複雜,且負載多變,調優對DBA很是困難:微信
總結起來就是三大問題:複雜,效率低,成本高。騰訊雲的智能性能調優工具如何在不斷實踐中破解這些問題呢?網絡
實踐一:啓發式搜索方法/Search-Based Algorithm架構
輸入包括兩部分:機器學習
Configuration Sampler:會對輸入參數進行取樣,生成配置;配置會被設置到SUT(也就是待調優環境)。System Manipulator:它和SUT進行交互,設置參數,而且會得到SUT的性能數據。ide
Performance Optimizer:根據配置和性能數據找到最優的配置。PO算法主要包括兩個方法:DDS和RBS。函數
lDivide-and-Diverge Sampling (DDS)工具
這裏經過DDS來劃分參數的子空間,下降問題的複雜度。首先把每一個參數劃分紅k個區域,那麼n個參數就有k^n個組合,從而下降複雜度。假設k和n若是比較大的話,空間可能仍是很大。如何處理?此時可用超抽樣的方法,只抽出k個樣本解決。性能
lRecursive Bound-and-Search (RBS)
在一個性能平面上的某個點附近,老是能找到性能相近或者更好性能的點,也就是說可能找到更好的配置。在已有的樣本里,找到性能最好的那個配置。而後在這個配置周圍,運行多輪,遞歸尋找可能更好的配置。
基於搜索的方法可能的問題是,抽樣和測試可能耗時很長,並且可能陷入局部最優。
實踐二:機器學習方法/Machine Learning
主要包括三個步驟:
l識別負載特徵
對metric進行了降維,metric是指系統的內部狀態指標,好比MySQL的innodb_metric。這裏用了兩個方法,一個是FA,一個是K均值聚類。
配置參數有幾百個,先經過Lasso線性迴歸參數和性能的關係進行排序。優先考慮對性能影響較大的參數。
匹配目標workload,也就是根據負載在不一樣配置下面運行,表現出來的metric特性,匹配到最類似的負載。而後,根據匹配到的負載,推薦最優的配置。這裏用到高斯過程,同時加入exploration/ exploitation,即探索、利用的過程。
這種方法的問題是,調優過程很是依賴歷史數據,要匹配到類似的workload才能夠,對訓練數據要求比較高。若是匹配不到,則找不到很好的配置。
實踐三:深度學習方法/Deep Learning
經過深度學習網絡,推薦須要最終調節的參數:
這個模型高度依賴訓練數據,須要得到各類負載在各類配置下的性能數據。而數據庫的負載和配置的組合實在太多了,基本不可能覆蓋到。假設匹配不到相似場景,調優結果可能不理想。
實踐四:深度強化學習方法/Reinforcement Learning
在強化學習中,模擬人與環境交互的過程。Agent會根據觀察到的狀態state,作出相應的反應action。同時,Environment接受action,改變本身的狀態。這個過程會根據必定規則,產生相應的reward,也就是對於action的評價。
最終經過實踐比較,咱們選取使用強化學習的模型,開發數據庫參數調優工具CDBTune。它強調調參的動做,擺脫以數據爲中心的作法。
強化學習與參數調優,咱們定義以下規則:
咱們把系統的內部metric叫作內部指標;外部的性能數據,好比TPS/QPS/Latency叫作外部指標。在數據庫參數調優場景中,具體作法是:Agent選擇一個參數調整的action(也多是多個參數)做用於數據庫,根據執行action後的外部指標,計算應該得到的即時獎勵。
在強化學習對應到參數調優這個場景。此場景的問題是:強化學習須要構造一張表,代表在某種狀態下,執行某個操做,得到的收益後,咱們才知道執行什麼操做得到的收益是最大的。可是數據庫的狀態空間(性能指標)和動做空間(配置組合)特別大,組合這樣一張表出來是不可能的任務。此時深度強化學習就派上用場了,咱們要經過一個深度網絡逼近這個Q-table的效果,也就是CDBTune的實現方法。
CDBTune實現
此模型主要分紅兩部分。
l數據庫環境:如圖左邊,參數會被設置到這個環境裏,而後環境的內部指標和外部指標會被採集,反饋給右邊的模型。
l深度強化學習網絡:如圖右邊,實現算法相似DeepMind發佈的Nature DQN,採用兩個Q-Network。
另外,Replay Memory是咱們的記憶池,歷史數據會被記錄下來。而後訓練會不斷進行,不斷加入記憶池。深度學習網絡會從記憶池中隨機選取樣本機型訓練。
在估計一個action的reward的時候,基於一個假設:咱們的回報取決於對將來每一步的結果影響;而影響最大的,是最近的回報。經過
近似得到這個Q值。對於一個樣本(s, a)而言,咱們能夠獲得真正的回報r。這時候咱們能夠得到他們以前的Loss,調整左邊的網絡,使兩邊的Loss愈來愈小。這樣咱們的網絡就會逐漸收斂,得到更好的推薦。
數據形式和相關策略
效果評估
經過測試能夠看到,在不須要任何前期數據收集的狀況下,CDBTune經過自我學習參數調優過程,達到較優的參數調優效果,CDBTune調優得到的吞吐和延時性能均達到較爲理解的水平。這也是深度強化學習方法相對於其餘幾種方法的優點所在。
總結:
基於DQN智能調參的優點
在實踐過程當中,咱們也遇到一些問題:
針對這些問題,咱們也在不斷優化和改進咱們的模型,優化參數。相信CDBTune能夠在將來取得更好的效果。
此文已由做者受權騰訊雲+社區發佈,原文連接:https://cloud.tencent.com/dev...
歡迎你們前往騰訊雲+社區或關注雲加社區微信公衆號(QcloudCommunity),第一時間獲取更多海量技術實踐乾貨哦~