近日,智能數據庫和DAS團隊研發的智能調參ResTune系統論文被SIGMOD 2021錄用,SIGMOD是數據庫三大頂會之首,是三大頂會中唯一一個Double Blind Review的,其權威性毋庸置疑。
ResTune論文的錄用,說明了我們在智能化數據庫管控方向的技術積累和深度,也是阿里雲自治數據庫和智能化運維里程碑式的一步。目前,智能調參功能已經在數據庫自治服務(DAS)上落地,是業界第一個正式上線的數據庫配置參數智能調參功能,進一步說明了阿里雲自治數據庫方向的技術領先性。
1. 概述
調參服務在阿里豐富的業務場景中有着廣泛的應用,如數據庫系統的性能與配置參數優化、機器學習模型/深度神經網絡的超參選擇、推薦系統和雲調度系統中參數的自適應調節、工業控制和供應鏈中的仿真優化和參數優化等。如何在生產環境中支持客戶實際需求,是學術界AI for system的一個研究熱點。
今年,由達摩院-數據庫與存儲實驗室-智能數據庫團隊研發的ResTune智能調參工作(ResTune: Resource Oriented Tuning Boosted by Meta-Learning for Cloud Databases,地址:
https://dl.acm.org/doi/pdf/10.1145/3448016.3457291),主要針對OLTP數據庫系統的性能參數進行調優,涉及RDS MySQL、RDS PostgreSQL、PolarDB MySQL、PolarDB-O等數據庫系統,該工作發表在數據庫領域的頂級會議SIGMOD2021(Research Track),並在阿里雲數據庫自治服務DAS產品中技術落地。
2. 背景
數據庫系統如MySQL提供200多個配置參數,不同的參數組合與不斷變化的業務負載特征,共同決定着數據庫系統的性能和資源使用。針對集團內的業務,通常DBA會根據不同的業務,按人工經驗手動選擇一組適合的參數。隨着數據庫上雲的加速,業務越來越多樣化,僅僅依賴於DBA人工調參遇到水平擴展的瓶頸制約。同時,由於DBA經驗的差異性,很難對多種多樣的業務負載都找出最優參數。雲廠商要做到“客戶第一”,自動化的調參功能至關重要:在不同的實例環境下對時間上不斷變化的多樣業務負載,自適應的提供個性化的優化參數。
數據庫系統調參需要同時考慮性能(如Transactions per second/TPS、Latency)和資源使用(CPU、Memory、IO)的情況。性能優化固然重要,但真實負載的TPS往往受用戶的request rate所限,很難達到峰值性能。圖1是兩個參數下不同取值的TPS和CPU利用率,可以看到,在TPS最高的紅色區域對應的CPU利用率變化較大,從15%到75%。而在TPS相同的情況下,資源利用率有很大優化空間。從成本角度,TCO(Total Cost of Ownership)是雲數據庫的重要指標,也是雲數據庫的主要優勢。
優化資源使用對減少雲數據庫的TCO,提高成本優勢有着重要意義。事實上,我們發現雲上大多數實例都存在Over-Provision的情況。此外,資源使用過高可能會造成雲數據庫的異常和資源爭搶帶來的性能下降;優化數據庫的資源使用能夠有效減少甚至避免此類情況引發的故障,提高穩定性。
3. 挑戰
我們分析了調參的目標是同時考慮優化資源使用率和性能,上文也提到性能如TPS往往會被客戶端的request rate所限而達不到峰值性能。因此,我們需要找出資源利用率最小的數據庫配置參數,並且滿足SLA的要求。
另一方面,調參本身需要盡可能快(不然違背了降低資源使用),通常的調參系統需要上百步迭代來找出好的配置,每一步迭代約3-5分鍾回放workload,這樣通常需要天級別的時間進行調參訓練。但如果想解決在線troubleshoot的需求,往往需要在1個小時內找出問題,進行恢復。作為雲廠商,我們基於已有業務負載調參的歷史數據,采用知識遷移學習,可有效加速調參過程,從而盡可能快地找出好的數據庫參數配置。
4. 相關工作
數據庫調參是最近研究相對熱門的領域,在過去幾年中有不少工作發表。這些工作按照技術思路主要可以分為三大類:基於搜索的啟發式方法、基於貝葉斯優化的方法、基於強化學習(Reinforcement Learning)模型的方法。
- 基於搜索的啟發式方法:該類方法通常基於啟發式思路,通過給定的規則算法進行搜索來找出優化參數,這一工作的代表是BestConfig[3]系統。這類方法依賴於對workload以及參數對性能影響的先驗假設,但在實際中特別是雲場景,往往很難為每個workload進行特殊優化和特征工程。這類方法在搜索一組新參數的時候,沒有考慮到之前采樣到數據的分布,因此效率不高。
- 基於貝葉斯優化的方法:該類方法的代表是iTuned[4]和CMU的Andy Pavlo實驗室的SIGMOD17工作OtterTune[5]。貝葉斯優化將調參看作是一個黑盒優化問題,通過代理函數模擬參數和目標間的函數,並設計采集函數來最小化采樣步數。這類方法沒有考慮以優化資源為目標的調參,只考慮了優化峰值性能。在實際中,除了壓測和大促的極端場景,通常用戶對TPS是無感的,TPS往往達不到峰值,因此僅考慮性能作為目標還不夠。OtterTune系統還提出了基於Internel Metric(數據庫狀態表的指標)的mapping的方案來利用已有數據,這種mapping方法利用來自同一硬件類型的歷史數據,沒有充分利用雲廠商豐富的數據資源。另一方面,這種方式依賴於預測出來的Internel Metric的相似性計算,在數據點較少的情況下容易不准確。
- 基於強化學習的方法:這類方法是最近數據庫調參的熱門方向,主要包括SIGMOD18的工作CDBTune[6]和VLDB19的QTune[7]工作。通過將Internal Metrics(state)到Knobs(action)的關系抽象成一個policy neural network和一個value network來反饋,將數據庫調參問題轉化成一個馬爾科夫決策過程,不斷地自我訓練,學習出最優參數。一方面,這類工作沒有考慮優化資源。另一方面,更重要的是調參問題並不是一個帶狀態的馬爾科夫決策過程,因為參數直接決定了數據庫性能,不需要復雜的狀態空間, 不同於強化學習需要通過解bellman equation來優化模型累計獲得的Reward。在這些工作中,往往需要上千步迭代找出好的參數,這難以滿足我們在生產環境中進行調參的要求。
5. 問題定義和算法概述
我們將問題定義成帶限制的優化問題如下,其中限制條件常數可通過設定為默認配置參數下的TPS和Latency值。
ResTune將最優化資源使用並滿足SLA轉化成帶限制的優化 (Constrained Bayesian Optimization) 問題。相比於傳統的貝葉斯優化算法,這里采用了帶限制的 EI 函數 (Constrained EI, CEI),我們將限制信息加入了常用的 EI 效用函數(Acqusition Function)。詳見論文的第五章內容。
另一方面,為了更好地利用已有數據,ResTune還設計了靜態權重和動態權重相結合的高斯加權模型。通過ensemble歷史的高斯過程模型,加權平均出目標workload的surrogate函數。這里最核心的問題是如何定義權重。
在冷啟動時(沒有觀察數據時),靜態權重學習會根據任務工作負載的 meta-feature 距離分配權重。meta-feature 的計算需要通過工作負載的分析,得到工作負載特征向量。
當積累了一定數據(如10條數據)后,ResTune使用動態權重學習策略,通過偏序關系(如下圖所示,盡管TPS絕對值不同,但是曲面趨勢相同,因此偏序關系也類似),比較歷史學習器的預測與目標任務的真實觀察結果之間的相似程度。使用動態分配策略,權重會隨着對目標工作負載的觀察次數的增加而動態更新。通過這兩種策略,ResTune最終得到了一個元學習器(Meta-Learner),它可以作為經驗豐富的代理模型,更多的細節可以參考論文的第六章內容。
6. ResTune系統設計
ResTune將調參問題抽象成帶限制的優化問題,即最小化資源使用率,同時滿足SLA的限制。下圖給出了ResTune的系統架構設計。ResTune 系統包括兩個主要部分:ResTune Client 和 ResTune Server。
- ResTune Client 運行在用戶VPC環境中,負責目標任務的預處理和推薦參數配置的執行,由 Meta-Data Processing 模塊和 Target Workload Replay 模塊組成。
- ResTune Server 運行在后端調參集群中,負責在每次訓練迭代中推薦參數配置,包括 Knowledge Extraction 模塊和 Knobs Recommendation 模塊。
一次調參任務中的一個迭代步流程如下:當一個調參任務開始后,系統首先對目標數據庫進行拷貝,並收集一段時間內的目標工作負載到用戶環境用於未來的回放。
在每一輪迭代中,目標任務首先通過 Meta-Data Processing 模塊得到 meta-feature 與 base model,作為 Knowledge Extraction 模塊的輸入;Knowledge Extraction 模塊負責計算當前任務與歷史任務 base model 集成時的靜態與動態權重,並對 base models 進行加權求和得到 meta model;在 Knobs Recommendation 模塊根據 Meta Learner 推薦一組參數配置;Target Workload Replay 模塊對推薦參數進行驗證,並將結果寫入目標任務的歷史觀察數據。
以上訓練過程重復若干迭代步,當達到最大訓練步或提升效果收斂時終止。目標任務訓練結束后,ResTune會當前任務的 meta-feature 與觀察數據收集到 Data Repository 作為歷史數據。
每個模塊的具體功能如下:
- Meta-Data Processing: 在調參任務初始啟動時,元數據處理模塊分析目標任務的工作負載,使用 TF-IDF 方法統計 SQL 保留字作為目標任務的特征向量 (meta-feature);在每輪迭代中,元數據處理模塊以歷史觀察數據為輸入,經過歸一化處理后,對資源(CPU, memory, IO等)利用率、TPS、Latency 擬合高斯模型,作為目標任務的基模型。
- Knowledge Extraction: 為了提取與利用歷史知識,我們提出了采用高斯模型加權求和的集成方式,即元模型 M 的關鍵參數 u由基模型加權計算得到。在計算基模型權重時采用了靜態與動態兩種方式。在初始化時,權重的計算采取靜態方式,以特征向量作為輸入,通過預訓練的隨機森林,得到資源利用率的概率分布向量,最終以據概率分布向量之間的距離作為任務相似性,決定靜態權重。當數據量充足后,ResTune使用動態權重學習策略,比較基學習器的預測與目標任務的真實觀察結果之間的相似程度。 使用動態分配策略,權重會隨着對目標工作負載的觀察次數的增加而更新。通過這兩種策略,我們最終得到元學習器,它可以作為經驗豐富的代理模型。
- Knobs Recommendation: 參數推薦模塊根據元模型推薦一組參數配置;采集函數我們使用了帶限制的 EI 函數 (Constrained EI, CEI),其根據限制情況重寫了 EI 的效用函數:當參數不滿足 SLA 限制時效用置0,且當前最佳參數定義為滿足 SLA 限制的最佳參數。CEI 采集函數能夠更好的引導探索滿足限制的最優區域。
- Target Workload Replay: 目標工作負載回放模塊首先推薦參數應用在備份數據庫上,並觸發工作負載的回放,經過一段時間的運行驗證后,驗證結果(包括資源利用率、TPS、latency)與推薦參數將一起寫入目標任務的觀察歷史。
7. 實驗評測
我們在多個場景下對比了 ResTune 和其它 SOTA (state-of-the-art)系統的性能與速度。
7.1. 單任務場景
首先,在單任務場景下,我們選定CPU利用率作為優化目標,驗證了 ResTune 解決帶 SLA 限制的優化問題的效果。這里我們測試了Sysbench、Twitter、TPC-C和兩個真實的workload:Hotel Booking和Sales。可以看出,ResTune方法在所有負載上都可以得到最佳效果與最佳效率。
7.2. 遷移場景
由於雲數據庫上存在大量用戶各種實例,因此我們提出的方法能否在不同工作負載、不同硬件之間遷移至關重要。同樣以CPU利用率作為優化目標,我們測試了不同機器硬件之間的遷移效果,可以看到我們提出的元學習算法帶來了顯著的訓練速度提升和訓練效果提升。使得整個ResTune的調參過程能在30-50步左右完成,而非遷移場景通常需要幾百個迭代步。
類似的,在不同工作負載之間的遷移實驗中,我們的元學習方法也帶來了顯著的訓練速度提升。
7.3. Memory和I/O資源優化
除CPU資源外,我們測試了內存資源、IO資源的調參優化效果。下圖可以看出,對於IO資源優化調參任務,ResTune 降低了 84% - 90% IOPS;對於內存資源優化調參任務,ResTune 將內存利用從 22.5G 下降至 16.34G。我們在論文中還估算了TCO的成本減少。
8. DAS業務落地
智能調參技術在DAS(Database Autonomy Service)產品上進行了落地。我們分為不同階段和細化功能進行上線。主要包括模板功能和基於壓測的智能調參功能。阿里雲是業界第一個上線調參功能的廠商,領先於騰訊和華為。
8.1. 模板參數功能
模板參數功能是我們一期上線的調參場景。在此之前,雲上RDS MySQL數據庫僅有一套統一的參數模板,這很難滿足雲上各不相同的用戶業務負載。因此,我們選取了不同種類的benchmark,在用戶使用最頻繁的RDS Instance類型上調參的離線訓練。
我們將用戶負載分為典型的6種場景如交易、社交網絡、壓測等,通過離線訓練我們給每一種典型場景訓練出了最優配置,並提供給用戶根據其業務特征進行選擇。這樣我們將之前的RDS的統一一套參數模板擴展到了多種典型的OLTP業務場景。
下表列出了我們離線調參訓練的結果,在不同workload上有13%-50%的提升。這里我們以TPS性能作為優化目標。
Workload名稱 | RDS默認配置下的TPS | 調參后的TPS | 提升百分比 |
TPCC(訂單處理) | 620 | 940 | ↑52% |
Smallbank(銀行業務處理) | 17464 | 22109 | ↑26.6% |
Sysbench(壓力測試) | 7950 | 10017 | ↑26% |
Twitter(社交網絡) | 41031 | 48946 | ↑19.2% |
TATP(通信) | 18155 | 21773 | ↑19% |
YCSB(壓力測試) | 41553 | 55696 | ↑34% |
Wikipedia(知識百科) | 600 | 678 | ↑13% |
8.2. 基於壓測的智能調參功能Cloudtune
以上基於模板參數功能驗證了雲上用戶對智能調參功能的需求。事實上,除了特別專業的用戶,大部分用戶較難非常准確地把握其業務特征。因此,用戶無法選出最合適其workload特點的一組參數模板。
為了解決用戶痛點,我們在DAS上線了基於壓測的智能調參功能。主要通過收集並回放用戶真實workload(在用戶VPC環境進行保證安全性),來針對用戶業務負載,定制化地訓練出性能最優的參數配置。這個功能我們叫做Cloudtune智能調參。
如前文ResTune的架構設計,我們首先需要在用戶VPC環境准備一個用戶數據庫RDS目標實例,然后啟動一個壓測肉機進行用戶環境真實workload的回放,並采集目標實例上的性能數據進行調參訓練。DAS Master用戶打通線上VPC環境和后端網絡環境。后端DAS App負責調參的主控邏輯,主要操作在用戶VPC環境的回放壓測,從而獲取相應Metric(資源使用率、TPS、Latency等),然后通過調用Cloudtune Microservice來進行迭代訓練,Cloudtune Service通過算法模型給出下一個采樣配置和目前為止找出的最好配置參數。
9. 未來工作
目前上線的調參功能是通過拉庫回放的方式,對用戶來說是一種離線的操作,且相對繁瑣。我們正在為幫用戶簡化去這個過程進行在線動態調參。
在線動態調參技術的挑戰和要求更高,首先,參數調節效果要求穩步提升,不能讓系統運行時出現性能猛烈的下降,不能影響線上實時的服務;其次,為了保證線上穩定性和調節過程快速收斂,在線動態調參需要針對不同的workload自動選擇關鍵的相關參數進行調節;最后,目前的工作假設用戶負載變化不頻繁,一旦用戶負載變化就需要重新進行調參。為了提高用戶體驗,要結合workload的檢測支持自適應的調參服務。
10. 智能數據庫其他研究工作簡介
智能數據庫團隊以數據庫運維和內核智能化為主要方向,深度融合人工智能、機器學習和數據庫專家經驗,使數據庫具備自治能力,實現自感知、自優化、自修復與自安全,保障服務的穩定、安全及高效。對外提供業內首個智能數據庫管控平台Database Autonomy Service (DAS) 。
相關工作還包括異常SQL檢測之大海撈針、一鍵智能壓測與基於壓縮感知的數據庫生成、采樣算法和SQL workload外置優化、圖多模數據異常檢測與根因診斷、索引推薦、冷熱數據分離、基於實例知識圖譜的智能調度、NLP2SQL人機交互接口、計算平台一體化、One-sided RDMA內存池化系統研發等。例如,DAS團隊在VLDB2020上發表的工作Leaper[2]有效地進行數據預取和Cache淘汰,解決了LSM-Tree存儲引擎架構的性能抖動,是學術界將機器學習模型集成到在OLTP數據庫內核的重要嘗試。
最近DAS基於統計與醫療數據分析中的生存分析設計了全新的冷熱數據分層算法,集成至Polar X Engine中,測試顯示性能提升10%,存儲成本下降25%。同樣在VLDB2020年發表的慢SQL診斷工作,DAS解決了海量SQL請求中近90%的CPU密集型的異常問題。
參考文獻
[1] Zhang, Xinyi, Hong Wu, Zhuo Chang, Shuowei Jin, Jian Tan, Feifei Li, Tieying Zhang, and Bin Cui. "ResTune: Resource Oriented Tuning Boosted by Meta-Learning for Cloud Databases." In Proceedings of the 2021 International Conference on Management of Data, pp. 2102-2114. 2021.
[2] Yang, Lei, Hong Wu, Tieying Zhang, Xuntao Cheng, Feifei Li, Lei Zou, Yujie Wang, Rongyao Chen, Jianying Wang, and Gui Huang. "Leaper: a learned prefetcher for cache invalidation in LSM-tree based storage engines." Proceedings of the VLDB Endowment 13, no. 12 (2020): 1976-1989.
[3] Y.Zhu,J.Liu,MengyingGuo,YungangBao,WenlongMa,ZhuoyueLiu,Kunpeng Song, and Yingchun Yang. 2017. BestConfig: tapping the performance potential of systems via automatic configuration tuning. Proceedings of the 2017 Symposium on Cloud Computing (2017).
[4] SongyunDuan,VamsidharThummala,andShivnathBabu.2009.TuningDatabase Configuration Parameters with ITuned. Proc. VLDB Endow. 2, 1 (Aug. 2009), 1246–1257.
[5] Dana Van Aken, Andrew Pavlo, Geoffrey J. Gordon, and Bohan Zhang. 2017. Automatic Database Management System Tuning Through Large-scale Machine Learning. In Acm International Conference on Management of Data. 1009–1024.
[6] Ji Zhang, Yu Liu, Ke Zhou, Guoliang Li, Zhili Xiao, Bin Cheng, Jiashu Xing,
Yangtao Wang, Tianheng Cheng, Li Liu, Minwei Ran, and Zekang Li. 2019. An End-to-End Automatic Cloud Database Tuning System Using Deep Reinforce- ment Learning. In Proceedings of the 2019 International Conference on Management of Data (Amsterdam, Netherlands) (SIGMOD ’19). Association for Computing Ma- chinery, New York, NY, USA, 415–432.
[7] Guoliang Li, Xuanhe Zhou, Shifu Li, and Bo Gao. 2019. QTune. Proceedings of the Vldb Endowment (2019)
[8]Tan, J., Zhang, T., Li, F., Chen, J., Zheng, Q., Zhang, P., ... & Zhang, R. (2019). ibtune: Individualized buffer tuning for large-scale cloud databases. Proceedings of the VLDB Endowment, 12(10), 1221-1234.
原文鏈接
本文為阿里雲原創內容,未經允許不得轉載。