騰訊雲CDB的AI技術實踐:CDBTune

歡迎你們前往騰訊雲+社區,獲取更多騰訊海量技術實踐乾貨哦~算法

做者:邢家樹,高級工程師,目前就任於騰訊TEG基礎架構部數據庫團隊。騰訊數據庫技術團隊維護MySQL內核分支TXSQL,100%兼容原生MySQL版本,對內支持微信紅包,彩票等集團內部業務,對外爲騰訊雲CDB for MySQL提供內核版本。

導語:CDBTune是騰訊雲自主研發的數據庫智能性能調優工具。相比於現有業界通用方法,CDBTune無需細分負載類型和積累大量樣本,經過智能學習參與參數調優,得到較好的參數調優效果。數據庫

數據庫系統複雜,且負載多變,調優對DBA很是困難:微信

  • 參數多,達到幾百個
  • 不一樣數據庫沒有統一標準,名字、做用和相互影響等差異較大
  • 依靠人的經驗調優,人力成本高,效率低下
  • 工具調優,不具備普適性

總結起來就是三大問題複雜效率低成本高。騰訊雲的智能性能調優工具如何在不斷實踐中破解這些問題呢?網絡

實踐一:啓發式搜索方法/Search-Based Algorithm架構

img

輸入包括兩部分:機器學習

  • 參數約束:包括要調優的參數集合和參數的上下界;
  • 資源的限制:調優過程在多少輪之後中止。

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

img

主要包括三個步驟:

l識別負載特徵

對metric進行了降維,metric是指系統的內部狀態指標,好比MySQL的innodb_metric。這裏用了兩個方法,一個是FA,一個是K均值聚類。

  • 識別配置參數和性能的相關性

配置參數有幾百個,先經過Lasso線性迴歸參數和性能的關係進行排序。優先考慮對性能影響較大的參數。

  • 自動調優

匹配目標workload,也就是根據負載在不一樣配置下面運行,表現出來的metric特性,匹配到最類似的負載。而後,根據匹配到的負載,推薦最優的配置。這裏用到高斯過程,同時加入exploration/ exploitation,即探索、利用的過程。

這種方法的問題是,調優過程很是依賴歷史數據,要匹配到類似的workload才能夠,對訓練數據要求比較高。若是匹配不到,則找不到很好的配置。

實踐三:深度學習方法/Deep Learning

img

經過深度學習網絡,推薦須要最終調節的參數:

  • 得到Workload對應的內部metric
  • 學習調參過程當中內部metric的變化規律
  • 學習最終須要調節的參數

這個模型高度依賴訓練數據,須要得到各類負載在各類配置下的性能數據。而數據庫的負載和配置的組合實在太多了,基本不可能覆蓋到。假設匹配不到相似場景,調優結果可能不理想。

實踐四:深度強化學習方法/Reinforcement Learning

img

在強化學習中,模擬人與環境交互的過程。Agent會根據觀察到的狀態state,作出相應的反應action。同時,Environment接受action,改變本身的狀態。這個過程會根據必定規則,產生相應的reward,也就是對於action的評價。

最終經過實踐比較,咱們選取使用強化學習的模型,開發數據庫參數調優工具CDBTune。它強調調參的動做,擺脫以數據爲中心的作法。

強化學習與參數調優,咱們定義以下規則:

  • 規則:每間隔必定時間調參,得到性能數據
  • 獎勵:性能提升得到正獎勵值,降低得到負獎勵值
  • 目標:調參時間/次數儘量少,得到較高的指望獎勵值
  • 狀態:系統內部metric指標

咱們把系統的內部metric叫作內部指標;外部的性能數據,好比TPS/QPS/Latency叫作外部指標。在數據庫參數調優場景中,具體作法是:Agent選擇一個參數調整的action(也多是多個參數)做用於數據庫,根據執行action後的外部指標,計算應該得到的即時獎勵。

在強化學習對應到參數調優這個場景。此場景的問題是:強化學習須要構造一張表,代表在某種狀態下,執行某個操做,得到的收益後,咱們才知道執行什麼操做得到的收益是最大的。可是數據庫的狀態空間(性能指標)和動做空間(配置組合)特別大,組合這樣一張表出來是不可能的任務。此時深度強化學習就派上用場了,咱們要經過一個深度網絡逼近這個Q-table的效果,也就是CDBTune的實現方法。

CDBTune實現

img

  • S爲當前數據庫性能狀態(內部指標),S'爲下一狀態數據庫性能狀態
  • r爲即時獎勵,w爲神經網絡參數,a爲採起的動做(配置參數的執行)
  • Q爲狀態行爲價值函數

此模型主要分紅兩部分。

l數據庫環境:如圖左邊,參數會被設置到這個環境裏,而後環境的內部指標和外部指標會被採集,反饋給右邊的模型。

l深度強化學習網絡:如圖右邊,實現算法相似DeepMind發佈的Nature DQN,採用兩個Q-Network。

另外,Replay Memory是咱們的記憶池,歷史數據會被記錄下來。而後訓練會不斷進行,不斷加入記憶池。深度學習網絡會從記憶池中隨機選取樣本機型訓練。

在估計一個action的reward的時候,基於一個假設:咱們的回報取決於對將來每一步的結果影響;而影響最大的,是最近的回報。經過

img

近似得到這個Q值。對於一個樣本(s, a)而言,咱們能夠獲得真正的回報r。這時候咱們能夠得到他們以前的Loss,調整左邊的網絡,使兩邊的Loss愈來愈小。這樣咱們的網絡就會逐漸收斂,得到更好的推薦。

數據形式和相關策略

img

img

效果評估

img

經過測試能夠看到,在不須要任何前期數據收集的狀況下,CDBTune經過自我學習參數調優過程,達到較優的參數調優效果,CDBTune調優得到的吞吐和延時性能均達到較爲理解的水平。這也是深度強化學習方法相對於其餘幾種方法的優點所在。

總結:

基於DQN智能調參的優點

  • 化繁爲簡,無需對負載進行精確分類
  • 調參動做更符合實際調參時的狀況
  • 無需獲取足夠多的樣原本,減小前期數據採集的工做量
  • 利用探索-開發(Exploration & Exploitation)特色,下降對訓練數據的依賴,減少陷入局部最優的可能性

在實踐過程當中,咱們也遇到一些問題:

  • 選擇動做實際運行,訓練效率不高,訓練週期長
  • 對連續配置離散化處理,可能致使推薦配置的精度不高,收斂較慢
  • 使用動做的最大Q值,致使Q值的太高估計問題

針對這些問題,咱們也在不斷優化和改進咱們的模型,優化參數。相信CDBTune能夠在將來取得更好的效果。

此文已由做者受權騰訊雲+社區發佈,原文連接:https://cloud.tencent.com/dev...

歡迎你們前往騰訊雲+社區或關注雲加社區微信公衆號(QcloudCommunity),第一時間獲取更多海量技術實踐乾貨哦~

相關文章
相關標籤/搜索