姜璐璐,高錦濤
1.寧夏大學(xué) 信息工程學(xué)院,銀川 750021
2.寧夏大數(shù)據(jù)與人工智能省部共建協(xié)同創(chuàng)新中心,銀川 750021
數(shù)據(jù)庫管理系統(tǒng)(DBMS)經(jīng)過半個多世紀(jì)的研究和發(fā)展,獲得了快速的技術(shù)進(jìn)步和優(yōu)異的性能表現(xiàn),這其中少不了DBA 憑借豐富的個人經(jīng)驗(yàn),對眾多數(shù)據(jù)庫系統(tǒng)的參數(shù)進(jìn)行調(diào)優(yōu)。數(shù)據(jù)庫系統(tǒng)參數(shù)眾多,并且參數(shù)值易變,參數(shù)之間還存在邏輯關(guān)系。隨著數(shù)據(jù)庫和應(yīng)用程序的數(shù)量增加,依靠DBA 對數(shù)據(jù)庫參數(shù)進(jìn)行調(diào)優(yōu)變得十分困難,因?yàn)镈BA 可能只熟悉部分?jǐn)?shù)據(jù)庫參數(shù)的調(diào)優(yōu)方式,并且調(diào)優(yōu)過程是啟發(fā)式的,不能保證全局最優(yōu)。而找到全局最優(yōu)參數(shù)配置是一個NP-hard 問題[1],因此需要探索其他解決方案。
機(jī)器學(xué)習(xí)是一門研究如何設(shè)計算法、利用數(shù)據(jù)使機(jī)器在特定任務(wù)上取得更優(yōu)表現(xiàn)的學(xué)科,具有泛化能力和自我學(xué)習(xí)進(jìn)化的能力,至今機(jī)器學(xué)習(xí)研究已經(jīng)取得大量令人矚目的成就:在圖像分類任務(wù)上的識別準(zhǔn)確率超過人類水平,能夠生成人類無法輕易識別的逼真圖像等。而數(shù)據(jù)庫領(lǐng)域?qū)W術(shù)界和工業(yè)界共識的研究重點(diǎn)是將機(jī)器學(xué)習(xí)與數(shù)據(jù)庫系統(tǒng)進(jìn)行融合統(tǒng)一,自動化處理各種任務(wù),這其中就包括基于機(jī)器學(xué)習(xí)的數(shù)據(jù)庫參數(shù)調(diào)優(yōu)。2019 年6 月,Oracle 推出云上自治數(shù)據(jù)庫Autonomous Database;2020 年4 月,阿里云發(fā)布“自動駕駛”級數(shù)據(jù)庫平臺DAS;2021 年3 月,華為發(fā)布了融入AI 框架的openGauss2.0 版本。國內(nèi)外IT 企業(yè)紛紛將機(jī)器學(xué)習(xí)融入到自身數(shù)據(jù)庫系統(tǒng)的參數(shù)調(diào)優(yōu)中[2]。
數(shù)據(jù)庫調(diào)參技術(shù)是指通過調(diào)整數(shù)據(jù)庫內(nèi)部相關(guān)旋鈕參數(shù),從而提高系統(tǒng)性能的一種方式。對近些年數(shù)據(jù)庫參數(shù)調(diào)優(yōu)技術(shù)進(jìn)行系統(tǒng)研究,基于時間維度,研究針對傳統(tǒng)參數(shù)調(diào)優(yōu)技術(shù),從2017 年到2022 年之間的基于機(jī)器學(xué)習(xí)的參數(shù)調(diào)優(yōu)方法,按照技術(shù)-問題-解決方案的思路,以樹形結(jié)構(gòu)有條理地給出具體的研究技術(shù)、存在的問題以及解決這些問題的方案,如圖1,不僅能夠使參數(shù)調(diào)優(yōu)領(lǐng)域的研究者對近6 年的相關(guān)工作有一個整體的認(rèn)識,而且能夠提供將來的研究方向。從技術(shù)角度,將大方向劃分為傳統(tǒng)調(diào)參技術(shù)、基于BO(Bayesian optimization)模型的調(diào)參技術(shù)以及基于RL(reinforcement learning)的調(diào)參技術(shù),而基于BO模型的調(diào)參系統(tǒng)與基于RL 的調(diào)參系統(tǒng)分別以O(shè)tterTune(GPR)與CDBTune 為基礎(chǔ),對其存在的問題進(jìn)行總結(jié),然后根據(jù)問題描述目前存在的解決方案,最后分析該解決的方案又存在的某些問題,給出研究展望。
圖1 數(shù)據(jù)庫參數(shù)調(diào)優(yōu)研究思路Fig.1 Research ideas for database parameters tuning
本文按照圖1的研究思路,從如下三個方面介紹數(shù)據(jù)庫參數(shù)調(diào)優(yōu)系統(tǒng)的演化路徑。
第一類為傳統(tǒng)參數(shù)調(diào)優(yōu)技術(shù)。傳統(tǒng)參數(shù)調(diào)優(yōu)技術(shù)分為基于啟發(fā)式算法的與基于輔助決策的參數(shù)調(diào)優(yōu)技術(shù),基于輔助決策的參數(shù)調(diào)優(yōu)技術(shù)包括基于規(guī)則的與基于經(jīng)驗(yàn)?zāi)P偷膮?shù)調(diào)優(yōu)技術(shù)。
第二類為基于BO模型的參數(shù)調(diào)優(yōu)技術(shù)。早期被研究出基于BO 模型的系統(tǒng)之一為OtterTune(GPR)[3],它實(shí)現(xiàn)了自動化調(diào)優(yōu),當(dāng)然它也存在著眾多問題。比如在大數(shù)據(jù)集和高維特征向量表現(xiàn)不佳、沒有對分布式數(shù)據(jù)庫進(jìn)行處理、調(diào)優(yōu)時間長不能反應(yīng)真實(shí)的工作負(fù)載或者調(diào)優(yōu)復(fù)雜等等。針對上述問題,OtterTune(DNN)[4]、RelM[5]、OnlineTune[6]、CGPTuner[7]、ResTune[8]、Llama-Tune[9]等對上述問題提出了對應(yīng)的解決方案。OtterTune(GPR)與CDBTune將調(diào)優(yōu)思路集中在提高吞吐量和延遲上,而沒有同時優(yōu)化資源和SLA?;诖?,ResTune將調(diào)參問題抽象成帶限制的優(yōu)化問題并且采用了帶限制的EI 函數(shù)來解決上述問題。對于RelM 系統(tǒng),它解決OtterTune(GPR)與CDBTune等調(diào)優(yōu)系統(tǒng)沒對分布式數(shù)據(jù)處理系統(tǒng)調(diào)優(yōu)的問題,提出加快勘探需要一種基于改進(jìn)的策略,該策略遵循基于序列模型的優(yōu)化(SMBO),并且使用RelM 的分析模型來加速BO。由于OtterTune(GPR)與CDBTune 推薦的配置中有50%~70%比默認(rèn)配置更差,且調(diào)優(yōu)時間長,用戶調(diào)優(yōu)成本也較高,因此OnlineTune提出上下文特征化模型,能夠有效降低計算復(fù)雜度和模型選擇策略。CDBTune 系統(tǒng)使用DDPG 算法進(jìn)行參數(shù)調(diào)優(yōu),該算法使用神經(jīng)網(wǎng)絡(luò)進(jìn)行調(diào)優(yōu),模型復(fù)雜,需要多次迭代,因此LlamaTune 提出基于隨機(jī)投影的自動降維技術(shù)并且用一種偏差抽樣方法來處理特定旋鈕的特殊值,以及旋鈕值桶化。OtterTune(DNN)針對原有OtterTune系統(tǒng)中GPR高斯過程模型在較大數(shù)據(jù)集和高維特征向量上表現(xiàn)不佳等問題,將GPR 模型改為DNN 模型,也提出dropout 正則化技術(shù),將高斯噪聲添加到神經(jīng)網(wǎng)絡(luò)參數(shù)中。針對OtterTune考慮更多IT堆棧層,導(dǎo)致搜索空間的維度呈指數(shù)增長,提出基于上下文高斯過程的CGPBO。Tuneful[10]是對Spark 大數(shù)據(jù)分析引擎的性能進(jìn)行優(yōu)化,解決了之前未從成本效益上進(jìn)行調(diào)優(yōu)的問題。
第三類為基于RL 的參數(shù)調(diào)優(yōu)基數(shù)。最早使用RL進(jìn)行參數(shù)調(diào)優(yōu)的系統(tǒng)為CDBTune[11],CDBTune基于深度學(xué)習(xí)框架,存在調(diào)優(yōu)時間長、多次運(yùn)行工作負(fù)載耗時、不能針對特定工作負(fù)載進(jìn)行調(diào)優(yōu)、神經(jīng)網(wǎng)絡(luò)復(fù)雜需要多次迭代時間較長等問題。Hunter[12]、QTune[13]、WATuning[14]等提出一系列解決措施。CDBTune采用DDPG算法,但DDPG沒有考慮工作負(fù)載特性。WATuning系統(tǒng)在原有DDPG算法基礎(chǔ)上增加注意力機(jī)制。QTune針對CDBTune系統(tǒng)多次運(yùn)行負(fù)載耗時問題,提出DS-DDPG模型,并提供三種數(shù)據(jù)庫調(diào)優(yōu)粒度。Hunter采用混合結(jié)構(gòu)解決冷啟動問題,并利用遺傳算法生成的樣本預(yù)熱DDPG算法。
參數(shù)調(diào)優(yōu)系統(tǒng)常見術(shù)語的術(shù)語表,如表1所示。
表1 數(shù)據(jù)庫參數(shù)調(diào)優(yōu)常見術(shù)語Table 1 Glossary of common terms for database parameters tuning
為了幫助研究人員與開發(fā)者更好地把握當(dāng)前參數(shù)調(diào)優(yōu)系統(tǒng)的發(fā)展?fàn)顩r,按照使用的技術(shù)的不同將參數(shù)調(diào)優(yōu)系統(tǒng)分為三個不同的方面,分別對這三個方面做進(jìn)一步的綜述:
(1)第1章概要介紹數(shù)據(jù)庫傳統(tǒng)參數(shù)調(diào)優(yōu)技術(shù)的研究情況以及存在的問題與挑戰(zhàn);
(2)第2章概要介紹數(shù)據(jù)庫基于BO 模型的參數(shù)調(diào)優(yōu)技術(shù)的研究情況以及存在的問題與挑戰(zhàn);
(3)第3章概要介紹數(shù)據(jù)庫基于RL 的參數(shù)調(diào)優(yōu)技術(shù)的研究情況以及存在的問題與挑戰(zhàn);
(4)第4章概要介紹數(shù)據(jù)庫參數(shù)調(diào)優(yōu)技術(shù)的研究情況,并進(jìn)一步探討數(shù)據(jù)庫研究的發(fā)展趨勢。
傳統(tǒng)參數(shù)調(diào)優(yōu)技術(shù)主要依靠DBA 的知識與經(jīng)驗(yàn),DBA 通過反復(fù)實(shí)驗(yàn)得到統(tǒng)計數(shù)據(jù),以此決定配置方案。這種方式本身存在很多不確定性,完全基于啟發(fā)式的方法大概率會造成局部最優(yōu)甚至是更加劣化,在此過程中還需要DBA 掌握大量相關(guān)知識,并且在有限資源下,不可能會遍歷所有的空間來找到最優(yōu)解,需要進(jìn)行數(shù)據(jù)庫自動調(diào)優(yōu)[15]。
傳統(tǒng)的參數(shù)調(diào)優(yōu)技術(shù)除了DBA根據(jù)經(jīng)驗(yàn)手動調(diào)參之外,還有一些可以輔助數(shù)據(jù)庫管理員調(diào)參的工具。按照工具使用技術(shù)的不同可以分為兩大類:基于規(guī)則的參數(shù)調(diào)優(yōu)技術(shù)和基于經(jīng)驗(yàn)?zāi)P偷膮?shù)調(diào)優(yōu)技術(shù)[16]。
(1)基于規(guī)則的參數(shù)調(diào)優(yōu)技術(shù)
第一類是基于規(guī)則的參數(shù)調(diào)優(yōu)技術(shù),它是根據(jù)某一個數(shù)據(jù)庫特定的需求設(shè)計出來的。系統(tǒng)根據(jù)用戶需求,給出參數(shù)調(diào)整意見。最常見的基于規(guī)則的參數(shù)調(diào)優(yōu)技術(shù)是MySQLTuner[17],通過收集數(shù)據(jù)庫狀態(tài)信息,根據(jù)確定的規(guī)則推薦給用戶參數(shù)配置。這類調(diào)參技術(shù)雖然比手動調(diào)參不確定性小,但由于它是針對某一特定數(shù)據(jù)庫需求進(jìn)行設(shè)計,若面對不同數(shù)據(jù)庫或用戶需求,則需要重新設(shè)計規(guī)則,普適性較差。
(2)基于經(jīng)驗(yàn)?zāi)P偷膮?shù)調(diào)優(yōu)技術(shù)
第二類是基于經(jīng)驗(yàn)?zāi)P偷膮?shù)調(diào)優(yōu)技術(shù),該方法需要通過大量實(shí)驗(yàn)發(fā)現(xiàn)旋鈕與數(shù)據(jù)庫性能之間的關(guān)系,并將結(jié)果返回給數(shù)據(jù)庫調(diào)參專家,調(diào)參專家通過可視化結(jié)果直觀地分析數(shù)據(jù)庫參數(shù)的值,選出符合用戶需求的配置進(jìn)行調(diào)優(yōu)。但這種方法跟基于規(guī)則的參數(shù)調(diào)優(yōu)技術(shù)類似,也是針對用戶需求進(jìn)行調(diào)優(yōu)。當(dāng)數(shù)據(jù)庫用戶需求發(fā)生改變時,該方法按照之前需求推薦的配置則不再適用。調(diào)優(yōu)過程需要經(jīng)過大量實(shí)驗(yàn),當(dāng)使用場景改變時,實(shí)驗(yàn)也需要重新進(jìn)行,耗費(fèi)大量資源。Wei 等人[18]提出的一種基于模糊規(guī)則的調(diào)優(yōu)工具,主要包括三個階段:首先從自動負(fù)載倉庫(automatic workload repository,AWR)中提取參數(shù)調(diào)優(yōu)相關(guān)數(shù)據(jù),利用自動負(fù)載倉庫獲取負(fù)載、數(shù)據(jù)庫狀態(tài)、表現(xiàn)統(tǒng)計等信息;然后,系統(tǒng)通過在不同配置下重復(fù)執(zhí)行負(fù)載,觀察不同配置下系統(tǒng)調(diào)優(yōu)結(jié)果,總結(jié)出調(diào)優(yōu)相關(guān)“模糊規(guī)則”,這些模糊規(guī)則只針對特定用戶需求,不具有普適性;最后,經(jīng)過訓(xùn)練數(shù)據(jù)得到經(jīng)驗(yàn)?zāi)P?,根?jù)用戶需求進(jìn)行參數(shù)配置推薦。
基于啟發(fā)式算法的參數(shù)調(diào)優(yōu)技術(shù)通過給定提前設(shè)置好的規(guī)則進(jìn)行搜索來找出需要進(jìn)行調(diào)優(yōu)的參數(shù),Best-Config[19]系統(tǒng)使用啟發(fā)式算法自動檢測整個參數(shù)配置過程。BestConfig系統(tǒng)流程圖[19]如圖2所示。
圖2 BestConfig調(diào)優(yōu)流程Fig.2 BestConfig tuning process
在負(fù)載生成模塊(workload generator)中,BestConfig 主要使用benchmark 工具。并且該模塊直接與SUT(system under tune)交互。性能優(yōu)化模塊(performance optimizer)將抽樣方法DDS(divide and diverge sampling)和優(yōu)化算法RBS(recursive bound and search)結(jié)合起來作為一個完整的解決方案。這也是該調(diào)優(yōu)系統(tǒng)主要的兩個算法。具體流程為:首先將整個N維參數(shù)空間離散化,采用DDS抽樣方法進(jìn)行抽樣,然后將每個參數(shù)的取值范圍劃分為k段,每一段隨機(jī)取一個值,這樣整個參數(shù)空間可以轉(zhuǎn)化為kN個點(diǎn)組成的樣本空間,并且為了保證抽樣的多樣性,要求每個參數(shù)值只能被取樣一次,然后使用RBS優(yōu)化算法進(jìn)行優(yōu)化,在每次抽樣的空間中隨機(jī)選取6 個樣本進(jìn)行測試,得到最好的點(diǎn),再以最好的點(diǎn)為中心劃分出下一個示例區(qū)域這樣迭代,直到不能得到表現(xiàn)更好的點(diǎn)或者達(dá)到資源限制為止。
上述所描述的幾種傳統(tǒng)的基數(shù)調(diào)優(yōu)方法主要體現(xiàn)了兩種思路:第一種是專家根據(jù)經(jīng)驗(yàn)給出對于特定場景下的調(diào)優(yōu)規(guī)則;第二種探索參數(shù)空間進(jìn)行抽樣,在有限資源下找到表現(xiàn)最好的區(qū)域。但是上述兩種思路,無論是專家依據(jù)經(jīng)驗(yàn)給出的參數(shù)調(diào)優(yōu)規(guī)則,還是依據(jù)抽樣算法來進(jìn)行參數(shù)調(diào)優(yōu),都不能很好地推薦提高系統(tǒng)性能的參數(shù)配置,即只能達(dá)到局部最優(yōu)解。而且每次參數(shù)調(diào)優(yōu)都是從頭開始進(jìn)行實(shí)驗(yàn)配置,不能利用之前的實(shí)驗(yàn)來進(jìn)一步優(yōu)化模型,這不僅會浪費(fèi)大量的資源,也會因?yàn)橐恍l件的限制也往往得不到最優(yōu)的結(jié)果。例如,Best-Config使用啟發(fā)式方法從歷史數(shù)據(jù)中搜索最佳配置,如果歷史數(shù)據(jù)質(zhì)量不高或者缺失,則會嚴(yán)重影響效果。
現(xiàn)有的基于BO 模型的參數(shù)調(diào)優(yōu)系統(tǒng)基本采用BO模型來建模參數(shù)與數(shù)據(jù)庫性能之間的關(guān)系。首先擬合概率代理模型,然后通過最大化采集函數(shù)選擇下一個配置來評估?,F(xiàn)階段有眾多學(xué)者提出基于BO 模型的系統(tǒng)?;贐O模型的部分調(diào)優(yōu)系統(tǒng)對比如表2所示。
表2 基于BO模型的參數(shù)調(diào)優(yōu)技術(shù)對比Table 2 Comparison of parameters tuning techniques based on BO
數(shù)據(jù)庫中有成百上千的旋鈕,不同的旋鈕組合制約系統(tǒng)性能。企業(yè)會雇傭?qū)iT的數(shù)據(jù)庫管理專家進(jìn)行調(diào)優(yōu),但專家往往是根據(jù)先前知識與經(jīng)驗(yàn)進(jìn)行調(diào)優(yōu)。并且,使用場景和工作負(fù)載會不斷變化,導(dǎo)致企業(yè)在系統(tǒng)維護(hù)方面投入大量資源,從而導(dǎo)致總體系統(tǒng)管理成本不斷增加。一些科學(xué)家在20世紀(jì)90年代初就提出實(shí)現(xiàn)自動數(shù)據(jù)庫調(diào)優(yōu)的想法,但并未引起廣泛關(guān)注。
卡耐基梅隆大學(xué)數(shù)據(jù)庫研究組開發(fā)GPROtterTune[20-22](在下文中簡稱為OtterTune),能夠根據(jù)用戶需求自動為數(shù)據(jù)庫系統(tǒng)的旋鈕找到合適的設(shè)置[20-21],且操作較為便捷。OtterTune系統(tǒng)是根據(jù)對之前數(shù)據(jù)庫系統(tǒng)調(diào)參的知識來推薦新的參數(shù)配置,這個過程由系統(tǒng)自動獲取。與OtterTune不同,iTuned不會使用從以前的調(diào)優(yōu)會話收集的數(shù)據(jù)來訓(xùn)練其GP 模型。文章使用OtterTune 和iTuned 生成的配置對TPC-C 工作負(fù)載的OLTP DBMS 進(jìn)行比較。對比分析得到OtterTune 在MySQL 的前30 min 和Postgres 的前45 min 內(nèi)找到了這個更好的配置,而iTuned需要60~120 min才能生成為這些系統(tǒng)提供任何重大改進(jìn)的配置。所以O(shè)tterTune充分利用之前數(shù)據(jù)可以節(jié)省大量調(diào)優(yōu)時間。具體做法為:OtterTune 將之前調(diào)參時所用的數(shù)據(jù)記錄到知識庫,然后用這些數(shù)據(jù)去構(gòu)建模型,進(jìn)而根據(jù)用戶需求推薦給新的數(shù)據(jù)庫系統(tǒng)參數(shù)配置。OtterTune分為客戶端和服務(wù)端。OtterTune 的客戶端安裝在目標(biāo)數(shù)據(jù)庫所在機(jī)器上,也就是用戶需要調(diào)參的數(shù)據(jù)庫所在的機(jī)器上,然后收集目標(biāo)數(shù)據(jù)庫的統(tǒng)計信息,并上傳到服務(wù)端。服務(wù)端一般配置在云上,它收到客戶端的數(shù)據(jù),訓(xùn)練機(jī)器學(xué)習(xí)模型并推薦參數(shù)文件。在此過程中客戶端接到推薦的參數(shù)配置文件后,配置到目標(biāo)數(shù)據(jù)庫上,測量其性能。以上步驟可以重復(fù)進(jìn)行直到用戶對OtterTune推薦的參數(shù)文件滿意。當(dāng)用戶配置好OtterTune 時,它能自動地持續(xù)推薦參數(shù)文件并把所得結(jié)果上傳到服務(wù)端可視化出來,而不需要數(shù)據(jù)庫管理員的干預(yù),這樣能大大簡化數(shù)據(jù)庫管理員的工作。
首先在數(shù)據(jù)預(yù)處理階段,使用因子分析(factor analysis,F(xiàn)A)的降維技術(shù),將度量減少到更小的因子集合。然后將FA輸出結(jié)果以散點(diǎn)圖的形式輸入到k-means聚類算法中,k-means 聚類算法將相鄰的因素進(jìn)行分組,從每組中選取一個具有代表性的指標(biāo),達(dá)到降維的目的。
利用上述方法將度量降維后,繼續(xù)計算對目標(biāo)函數(shù)影響最大的旋鈕的排序列表。論文使用了Lasso[23]特征選擇方法,其中旋鈕數(shù)據(jù)作為輸入X,輸出的是結(jié)合已經(jīng)修剪過的度量的目標(biāo)數(shù)據(jù)。Lasso 在X和Y之間的回歸過程中確定了重要的旋鈕順序。它從一個高懲罰設(shè)置開始,其中所有的權(quán)重都為零,因此在回歸模型中沒有選擇任何特征。然后減少懲罰,重新計算回歸,并跟蹤每個步驟中將哪些特征添加回模型。旋鈕在回歸中首次出現(xiàn)的順序決定了它們對目標(biāo)指標(biāo)的影響程度。得到旋鈕順序后,需要在調(diào)優(yōu)會話的每次迭代結(jié)束時生成新的配置建議。第一步是確定OtterTune過去調(diào)優(yōu)的工作負(fù)載中哪一個與當(dāng)前工作負(fù)載最相似。它利用先前數(shù)據(jù)來引導(dǎo)新的配置。OtterTune 基于GPR 算法,采用高斯過程作為先驗(yàn)函數(shù),計算測試點(diǎn)與所有訓(xùn)練點(diǎn)[24]之間距離。該算法利用核函數(shù)來預(yù)測測試點(diǎn)的值和不確定度。OtterTune系統(tǒng)流程圖[20]如圖3所示。
圖3 OtterTune調(diào)優(yōu)流程Fig.3 OtterTune tuning process
雖然OtterTune系統(tǒng)可以自動為DBMS找到合適的旋鈕配置,但面對大數(shù)據(jù)集和高維特征向量可能表現(xiàn)不佳。并且大數(shù)據(jù)場景下無法進(jìn)行并行處理,嚴(yán)重影響系統(tǒng)性能。
OtterTune 的高斯過程模型在大數(shù)據(jù)集和高維特征向量上表現(xiàn)不佳[5],為了改正這一點(diǎn),文獻(xiàn)[4]將GPR 模型改為DNN模型[25-26]。DNN依賴于對輸入應(yīng)用線性組合和非線性的深度學(xué)習(xí)算法。DNN模型的網(wǎng)絡(luò)結(jié)構(gòu)有兩個隱含層,每層有64個神經(jīng)元。所有各層均以ReLU作為激活函數(shù)完全連接。DNN-OtterTune 實(shí)現(xiàn)了一種稱為dropout正則化的技術(shù),以避免模型過擬合,并提高其泛化[27]。DNN 還在旋鈕推薦步驟[28]期間將高斯噪聲添加神經(jīng)網(wǎng)絡(luò)的參數(shù)中,以控制勘探與開發(fā)的數(shù)量。DNN-OtterTune 通過降低噪聲的規(guī)模,在整個調(diào)優(yōu)過程中提高了數(shù)據(jù)的利用率。
文章對比了GPR、DNN、DDPG 和DDPG++4 個算法,并給處理生成的優(yōu)化配置在3 個VM 上的平均性能改進(jìn)的數(shù)據(jù)。經(jīng)過對比分析GPR 在4 個算法中總是快速收斂,但是GPR 很容易陷入局部極小值。DNN 的性能是整體最好的,而DDPG和DDPG++需要更多的迭代次數(shù)才能達(dá)到好的優(yōu)化性能。
DNN-OtterTune 雖然能夠解決OtterTune 高斯過程模型在較大數(shù)據(jù)集和高維特征向量上表現(xiàn)不佳的問題,但DNN神經(jīng)網(wǎng)絡(luò)過于復(fù)雜,不利于擴(kuò)展。
近些年,由于數(shù)據(jù)規(guī)模和業(yè)務(wù)訪問負(fù)載越來越大,集中式數(shù)據(jù)庫逐漸出現(xiàn)性能瓶頸,需要分布式數(shù)據(jù)庫系統(tǒng)進(jìn)行支撐。Kunjir等人[5]研究在現(xiàn)代分布式數(shù)據(jù)處理系統(tǒng)中自動調(diào)整內(nèi)存分配問題,提出RelM算法,大大降低基于BO[29]和DDPG[30]等算法探索最優(yōu)參數(shù)配置的開銷。RelM系統(tǒng)能夠在現(xiàn)代分布式數(shù)據(jù)處理系統(tǒng)上運(yùn)行的應(yīng)用程序上自動調(diào)整內(nèi)存分配,流程圖如圖4所示。
圖4 RelM調(diào)優(yōu)流程Fig.4 RelM tuning process
首先應(yīng)用程序配置文件交由統(tǒng)計數(shù)據(jù)生成器處理,生成一組統(tǒng)計信息。然后枚舉器模塊通過初始化器和仲裁器運(yùn)行每個容器大小配置。給定容器大小和應(yīng)用程序配置文件中的統(tǒng)計信息,初始化器模塊獨(dú)立優(yōu)化每個池的內(nèi)存池,設(shè)置初始值。仲裁器仲裁初始化器分配給各個池的內(nèi)存,以確??煽啃院偷虶C開銷,并計算生成配置的效用分?jǐn)?shù)。最后,選擇器根據(jù)其效用得分對每個探測容器配置的最佳設(shè)置進(jìn)行排序,并返回最佳設(shè)置作為最終建議。
RelM 不是直接對高級調(diào)優(yōu)目標(biāo)(如延遲)進(jìn)行建模,而是針對內(nèi)存配置對系統(tǒng)資源利用效率和執(zhí)行可靠性的影響進(jìn)行建模,因此能夠使用極少量(1~2次)的文件配置快速調(diào)整內(nèi)存管理選項。RelM 核心是一組模型,用于估計應(yīng)用程序中各種競爭內(nèi)存池的需求。使用這些模型,保證了一個安全的、高資源利用效率的配置。RelM能夠理解基于內(nèi)存的數(shù)據(jù)分析系統(tǒng)中的內(nèi)存管理中多個級別算法之間的交互,并使用它們構(gòu)建分析解決方案,以自動調(diào)整內(nèi)存管理旋鈕。RelM 提出引導(dǎo)貝葉斯優(yōu)化(GBO)[31],GBO 為被測應(yīng)用程序提供一個配置和一組配置統(tǒng)計信息。該模型輸出一組導(dǎo)出的度量,除了用于優(yōu)化的原始配置選項之外,還使用簡單的分析模型導(dǎo)出額外的度量,目的是從更昂貴的區(qū)域中分離出配置空間最合適的區(qū)域。與SBO[31]相比,GBO不需要專家通過在調(diào)整時觀察系統(tǒng)性能來設(shè)計參數(shù)模型,而是使用白盒模型簡化此過程,并且從可靠性、效率等相關(guān)的應(yīng)用程序配置文件導(dǎo)出度量后插入到BO模型中,進(jìn)而適應(yīng)于各種類型的工作負(fù)載。為了加快最優(yōu)配置的探索效率,RelM 提出一種基于序列型優(yōu)化方法:SMBO改進(jìn)的策略[32],能夠在擬合代理模型和使用它推薦下一個探針之間進(jìn)行迭代。
RelM 是分布式框架,解決了大數(shù)據(jù)場景下普通調(diào)優(yōu)系統(tǒng)調(diào)優(yōu)性能的問題。但是泛化能力有限,不能較好地適應(yīng)新的工作負(fù)載。
OtterTune利用BO模型,通過平衡探索和開發(fā)來推薦參數(shù)配置;CDBTune采用強(qiáng)化學(xué)習(xí),通過試錯來學(xué)習(xí)調(diào)優(yōu)策略。它們可以找到接近最優(yōu)的配置,但存在50%~70%的調(diào)優(yōu)結(jié)果比默認(rèn)配置更差[6]。在配置過程中,配置的總內(nèi)存(例如緩沖池、插入緩沖區(qū)、排序緩沖區(qū)等)大于機(jī)器的物理容量,調(diào)優(yōu)甚至?xí)?dǎo)致兩次系統(tǒng)掛起。這種不好的建議會給在線數(shù)據(jù)庫帶來巨大的風(fēng)險。
考慮到數(shù)據(jù)庫負(fù)載動態(tài)變化以及安全性,Zhang 等人[6]提出了OnlineTune,能夠適應(yīng)動態(tài)負(fù)載,并且保證每次調(diào)優(yōu)采樣的安全性。OnlineTune 將在線調(diào)優(yōu)問題定義為具有安全約束的上下文bandit 問題,進(jìn)而提取工作負(fù)載和底層數(shù)據(jù)的特征,形成上下文特征化模型。OnlineTune采用上下文貝葉斯優(yōu)化技術(shù)來優(yōu)化數(shù)據(jù)庫,以適應(yīng)不斷變化的環(huán)境。針對云環(huán)境中海量數(shù)據(jù)對OnlineTune可擴(kuò)展性的影響,提出了一種有效降低計算復(fù)雜度的聚類和模型選擇策略。該方法對觀測值進(jìn)行聚類,每個聚類中的觀測值個數(shù)可以限制在一個常數(shù)P之下。OnlineTune 基于聚類擬合多個上下文GP,并學(xué)習(xí)用于模型選擇的決策邊界。首先基于上下文特征,執(zhí)行DBSCAN聚類算法[33],為每個特征獲得聚類標(biāo)簽li。對于每個聚類,OnlineTune使用其觀察結(jié)果擬合上下文GP模型。為了選擇模型,使用SVM來學(xué)習(xí)非線性決策邊界,除了提高可擴(kuò)展性之外,這種聚類從GP模型的訓(xùn)練集中排除了一些觀察,防止了“負(fù)遷移”[34]。OnlineTune結(jié)合黑盒和白盒知識來評估配置的安全性,黑盒就是用上下文GP 預(yù)測安全性,由于是對每個子集建立的GP,模型比全局GP更精準(zhǔn)。白盒來源于領(lǐng)域知識、DBA 經(jīng)驗(yàn),或者一些啟發(fā)式規(guī)則。OnlineTune 使用MysqlTuner[17]實(shí)現(xiàn)白盒助手。但白盒有時并不會根據(jù)反饋進(jìn)行進(jìn)化,導(dǎo)致局部最優(yōu)的陷阱。當(dāng)白盒拒絕配置而黑盒推薦配置時,采用放松策略,為每個規(guī)則定一個沖突計數(shù)器,如果沖突達(dá)到閾值,將忽略規(guī)則并推薦有爭議的配置,大的閾值增加了白盒規(guī)則的可信度。文章通過子空間自適應(yīng)提出安全的勘探策略,在很大程度上降低了應(yīng)用有害配置的風(fēng)險。OnlineTune 系統(tǒng)流程圖如圖5所示。
圖5 OnlineTune調(diào)優(yōu)流程Fig.5 OnlineTune tuning process
OnlineTune首先通過上下文特征捕獲動態(tài)因素(如工作負(fù)載及其基礎(chǔ)數(shù)據(jù)),獲得上下文。然后從具有相似上下文的聚類中選擇適合的上下文GP模型。對于新擬合的模型,以最優(yōu)估計配置為中心初始化子空間。否則,會根據(jù)調(diào)優(yōu)歷史對子空間進(jìn)行調(diào)整,其次對適應(yīng)子空間進(jìn)行離散化,構(gòu)建候選集。OnlineTune基于模型的下界估計來評估候選對象的安全性,形成一個安全集。它還會用白盒來排除不安全的配置。如果啟發(fā)式白盒從安全集合中排除了最優(yōu)配置,OnlineTune通過最大化獲取函數(shù)或探索子空間的安全邊界,從安全集合中選擇一個配置。最后,將配置應(yīng)用于在線數(shù)據(jù)庫并評估其性能。文章還從基準(zhǔn)測試和現(xiàn)實(shí)應(yīng)用中對動態(tài)工作負(fù)載進(jìn)行評估。結(jié)果表明,與目前的最先進(jìn)的方法相比,OnlineTune 在減少了91.0%~99.5%不安全推薦的同時,提高了14.4%~165.3%的累積改進(jìn)。
OnlineTune 解決了OtterTune 系統(tǒng)調(diào)優(yōu)時間長,不能反應(yīng)真實(shí)負(fù)載的缺點(diǎn),并且具備在線調(diào)優(yōu)以及保證在線調(diào)優(yōu)安全性的能力。在線調(diào)優(yōu)可以實(shí)時根據(jù)工作負(fù)載的變化來進(jìn)行調(diào)優(yōu),更好地適應(yīng)數(shù)據(jù)庫動態(tài)性的特征,但調(diào)優(yōu)時間較長。如果將在線調(diào)優(yōu)與離線調(diào)優(yōu)相結(jié)合,利用離線過程可以使系統(tǒng)在目標(biāo)DBMS的副本上探索更多配置,重用歷史工作負(fù)載,用其來收集用于在線調(diào)優(yōu)的觀察結(jié)果,可以大大減少調(diào)優(yōu)時間。
OtterTune 利用過去的經(jīng)驗(yàn)并收集新的信息來調(diào)優(yōu)DBMS配置加速新工作負(fù)載下的搜索過程。然而,要做到這一點(diǎn),需要收集大量歷史數(shù)據(jù),并且所有實(shí)驗(yàn)都應(yīng)該包含所有可用參數(shù)。Cereda等人[7]提到由于搜索空間的維度呈指數(shù)增長,收集知識庫的復(fù)雜性也會增加,它會變得越來越復(fù)雜。因此,提出CGPTuner 系統(tǒng)[7],它不需要任何初始的知識收集,并且能夠在30 次迭代之后提出性能良好的配置。
CGPTuner 是一種基于CGPBO[35]的自動配置調(diào)優(yōu)器,CGPBO 是貝葉斯優(yōu)化框架的上下文擴(kuò)展。貝葉斯優(yōu)化已經(jīng)成功地應(yīng)用于性能自動調(diào)優(yōu)問題[11,31,36-38]。CGPTuner 在考慮多層IT 堆棧和當(dāng)前工作負(fù)載的同時,成功地調(diào)優(yōu)了IT系統(tǒng)的配置,更重要的是,它不依賴于歷史知識庫。首先,在IT堆棧中,DBMS處于整個IT棧的最頂端,下面的JVM(Java virtual machine,Java 虛擬機(jī))、操作系統(tǒng)的配置調(diào)優(yōu)也都會影響DBMS 的性能。其次,DBMS 的性能還跟它所處的工作負(fù)載有關(guān),即系統(tǒng)需要是實(shí)時、在線地自動調(diào)優(yōu)。再次,目前軟件版本更新得比較快,版本更新會修改其可用的參數(shù),那么從先前的知識庫中重用信息就讓調(diào)優(yōu)的問題變得更加復(fù)雜,因此要求系統(tǒng)不再利用先前的知識庫。
基于上下文的高斯過程優(yōu)化是指某些工作負(fù)載下的優(yōu)化是相關(guān)的,比如工作負(fù)載w下得到的數(shù)據(jù),可能為另一工作負(fù)載提供一些有用的信息。CGPTuner所提模型的優(yōu)化目標(biāo)就是在給定工作負(fù)載w下,找到一個配置向量x,將其應(yīng)用在IT 棧上面來優(yōu)化系統(tǒng)的性能指標(biāo)y。調(diào)優(yōu)器能夠利用先前所有迭代的x、w和y,但不需要其他額外的知識。
文章用兩個指標(biāo)來衡量在線與離線兩種方式下的調(diào)優(yōu)器的性能,分別是在線調(diào)優(yōu)的累計獎勵calculative reward(CR)和離線調(diào)優(yōu)的迭代最佳值iterative best(IB)。若CR的值為0,則表示與默認(rèn)配置性能相同,若CR 的值為負(fù)數(shù),則表示所找的配置不如默認(rèn)的配置。IB值記錄了當(dāng)前迭代下記錄的最高的標(biāo)準(zhǔn)性能改進(jìn),它反映了調(diào)優(yōu)器快速探索并且找到良好配置的能力。文章結(jié)果表明:從IB 值的變化可以得到CGP 相較于另外兩種在線調(diào)優(yōu)算法,能更快找到良好的配置,并且找到的配置質(zhì)量高于另外兩種算法;從CR 值的變化情況可以看到,OpenTuner 和BestConfig 的累計獎勵值在持續(xù)地負(fù)向增加,也就是說這兩種算法找的配置始終比默認(rèn)的設(shè)置更差,而CGPTuner在第三天開始CR值開始正向增加,并且在第六天累計獎勵的值開始為正值并不斷增加;在另一種工作負(fù)載模式上的結(jié)果類似。
除了從優(yōu)化的角度比較了各種算法外,還從吞吐量和內(nèi)存消耗的角度來比較了三種算法,結(jié)果表明CGP在大多數(shù)工作負(fù)載上都能獲得更好的結(jié)果。
CGPTuner 解決了OtterTune 隨著搜索空間維度呈指數(shù)增長,收集大量歷史數(shù)據(jù)復(fù)雜性增加的問題。CGPTuner 不依賴于歷史知識庫,并且經(jīng)過多次迭代后提出較優(yōu)配置。但CGPTuner在每次迭代后收集數(shù)據(jù)集變得越來越復(fù)雜,并且每次都進(jìn)行單一的評估會造成時間復(fù)雜度過大,所以研究如何進(jìn)行可重復(fù)評估是非常重要的。
現(xiàn)有數(shù)據(jù)庫調(diào)優(yōu)方法[11,13,38-39]主要集中在提高吞吐量和延遲率,而沒有同時優(yōu)化資源使用和SLA(service level agreement)。iTune[38]和OtterTune[40]使用高斯進(jìn)程調(diào)優(yōu)旋鈕,只實(shí)現(xiàn)高吞吐量。CDBTune[11]和QTune[13]使用強(qiáng)化學(xué)習(xí)方法訓(xùn)練策略模型來推薦好的旋鈕,但是這需要很長時間來學(xué)習(xí)模型[6]。另一方面在重復(fù)地使用工作負(fù)載以迭代地學(xué)習(xí)模型過程中,即使最先進(jìn)的系統(tǒng)[11,40]也需要成百上千次的迭代才能找到理想配置,所以系統(tǒng)應(yīng)該盡量縮短調(diào)優(yōu)時間。
ResTune系統(tǒng)調(diào)參的目標(biāo)是同時考慮優(yōu)化資源使用率和性能,由于TPS(transactions per second)會被客戶端的request rate所限而達(dá)不到峰值性能[8]。因此,需要找出資源利用率最小的數(shù)據(jù)庫配置參數(shù),并且滿足SLA。此外,優(yōu)化DBMS系統(tǒng),例如降低高資源利用率,可以用于在線性能故障排除。高利用率可能會嚴(yán)重影響系統(tǒng)可用性。通過將預(yù)算減少到數(shù)十次迭代來加速調(diào)優(yōu)過程,ResTune 利用從調(diào)優(yōu)其他任務(wù)中收集的歷史數(shù)據(jù),并將經(jīng)驗(yàn)轉(zhuǎn)移到調(diào)優(yōu)新任務(wù)中。
文章在多個場景下對比了ResTune 和其他SOTA(state-of-the-art)系統(tǒng)的性能與速度。首先,在單任務(wù)場景下,文章選定CPU 利用率作為優(yōu)化目標(biāo),驗(yàn)證了ResTune 解決帶SLA 限制的優(yōu)化問題的效果。測試了Sysbench、Twitter、TPC-C 和兩個真實(shí)的工作負(fù)載:Hotel Booking 和Sales,實(shí)驗(yàn)得出,ResTune 方法在所有負(fù)載上都可以得到最佳效果與最佳效率。
文章還測試了不同機(jī)器硬件之間的遷移效果,得出:元學(xué)習(xí)算法使得整個ResTune 的調(diào)參過程能在30~50步左右完成,而非遷移場景通常需要幾百個迭代步。
除測試CPU資源外,還測試了內(nèi)存資源、IO資源的參數(shù)調(diào)優(yōu)效果,得出:對于IO 資源優(yōu)化調(diào)參任務(wù),Res-Tune 降低了84%~90%IOPS,對于內(nèi)存資源優(yōu)化調(diào)參任務(wù),ResTune將內(nèi)存利用從22.5 GB下降至16.34 GB。
ResTune 將該問題定義為具有約束的優(yōu)化問題,其中約束常量可以設(shè)置為默認(rèn)配置參數(shù)下的TPS 和延遲值。ResTune 將優(yōu)化資源使用和滿足SLA 轉(zhuǎn)換為約束貝葉斯優(yōu)化問題。與傳統(tǒng)的貝葉斯優(yōu)化算法相比,這里使用了受限EI 函數(shù),將受限信息添加到常用的EI 效用函數(shù)(acquisition function)中。另一方面,為了更好地利用現(xiàn)有數(shù)據(jù),ResTune 設(shè)計了一個結(jié)合靜態(tài)權(quán)重和動態(tài)權(quán)重的高斯加權(quán)模型。通過集成歷史的高斯過程模型,得到目標(biāo)工作負(fù)載代理函數(shù)的加權(quán)平均值。
ResTune 調(diào)參任務(wù)的具體流程如下:當(dāng)一個調(diào)參任務(wù)開始后,系統(tǒng)首先對目標(biāo)數(shù)據(jù)庫進(jìn)行拷貝,并收集一段時間內(nèi)的目標(biāo)工作負(fù)載到用戶環(huán)境用于未來的回放。在每一輪迭代中,目標(biāo)任務(wù)首先進(jìn)入元數(shù)據(jù)處理模塊(meta-data processing)模塊,該模塊在調(diào)參任務(wù)初始啟動時,元數(shù)據(jù)處理模塊分析目標(biāo)任務(wù)的工作負(fù)載,使用TF-IDF方法統(tǒng)計SQL保留字作為目標(biāo)任務(wù)的特征向量(meta-feature)。在每輪迭代中,元數(shù)據(jù)處理模塊以歷史觀察數(shù)據(jù)為輸入,經(jīng)過歸一化處理后,對資源(CPU、memory、IO 等)利用率、TPS、Latency 擬合高斯模型,作為目標(biāo)任務(wù)的基模型。最終得到meta-feature 與base model作為knowledge extraction模塊的輸入。
知識提?。╧nowledge extraction)模塊負(fù)責(zé)計算當(dāng)前任務(wù)與歷史任務(wù)base model 集成時的靜態(tài)與動態(tài)權(quán)重,并對base model 進(jìn)行加權(quán)求和得到meta model,在該模塊中為了提取與利用歷史知識,ResTune 提出采用高斯模型加權(quán)求和的集成方式,即元模型M的關(guān)鍵參數(shù)u由基模型加權(quán)計算得到。在計算基模型權(quán)重時采用靜態(tài)與動態(tài)兩種方式。在初始化時,權(quán)重的計算采取靜態(tài)方式,以特征向量作為輸入,通過預(yù)訓(xùn)練的隨機(jī)森林,得到資源利用率的概率分布向量,最終以概率分布向量之間的距離作為任務(wù)相似性,決定靜態(tài)權(quán)重。當(dāng)數(shù)據(jù)量充足后,ResTune使用動態(tài)權(quán)重學(xué)習(xí)策略,比較基學(xué)習(xí)器的預(yù)測與目標(biāo)任務(wù)的真實(shí)觀察結(jié)果之間的相似程度。使用動態(tài)分配策略,權(quán)重會隨著對目標(biāo)工作負(fù)載的觀察次數(shù)的增加而更新。通過這兩種策略,最終得到元學(xué)習(xí)器,作為經(jīng)驗(yàn)豐富的代理模型。
在旋鈕推薦(knobs recommendation)模塊,根據(jù)meta learner推薦一組參數(shù)配置。采集函數(shù)使用了帶限制的EI 函數(shù)(constrained EI,CEI),其根據(jù)限制情況重寫了EI 的效用函數(shù),當(dāng)參數(shù)不滿足SLA 限制時效設(shè)置為0,且當(dāng)前最佳參數(shù)定義為滿足SLA 限制的最佳參數(shù)。CEI 采集函數(shù)能夠更好地引導(dǎo)探索滿足限制的最優(yōu)區(qū)域。
目標(biāo)工作負(fù)載重放(target workload replay)模塊對推薦參數(shù)進(jìn)行驗(yàn)證,并將結(jié)果寫入目標(biāo)任務(wù)的歷史觀察數(shù)據(jù)。目標(biāo)工作負(fù)載回放模塊首先推薦參數(shù)應(yīng)用在備份數(shù)據(jù)庫上,并觸發(fā)工作負(fù)載的回放,經(jīng)過一段時間的運(yùn)行驗(yàn)證后,驗(yàn)證結(jié)果(包括資源利用率、TPS、latency)與推薦參數(shù)將一起寫入目標(biāo)任務(wù)的觀察歷史。
以上訓(xùn)練過程重復(fù)若干迭代步,當(dāng)達(dá)到最大訓(xùn)練步或提升效果收斂終止。目標(biāo)任務(wù)訓(xùn)練結(jié)束后,ResTune會把當(dāng)前任務(wù)的meta-feature與觀察數(shù)據(jù)收集到數(shù)據(jù)存儲庫(data repository)作為歷史數(shù)據(jù)。
ResTune 開辟了數(shù)據(jù)庫調(diào)優(yōu)的新方向,它改變了傳統(tǒng)調(diào)優(yōu)策略單純以延遲率與吞吐量為指標(biāo),而是提出了在優(yōu)化延遲率與吞吐量的同時,通過提升資源利用率來提高系統(tǒng)調(diào)優(yōu)性能。但目前ResTune 調(diào)參功能對用戶來說是一種離線操作,且相對繁瑣。
在線動態(tài)調(diào)參技術(shù)能夠緩解離線操作的問題,但具有更高的要求。首先,參數(shù)調(diào)優(yōu)效果要求穩(wěn)步提升,不能讓系統(tǒng)運(yùn)行時出現(xiàn)性能猛烈的下降,不能影響線上實(shí)時的服務(wù);其次,為了保證線上穩(wěn)定性和調(diào)節(jié)過程快速收斂,在線動態(tài)調(diào)參需要針對不同的工作負(fù)載自動選擇關(guān)鍵的相關(guān)參數(shù)進(jìn)行調(diào)節(jié);最后,目前的工作假設(shè)用戶負(fù)載變化不頻繁,一旦用戶負(fù)載變化就需要重新進(jìn)行調(diào)參。為了提高用戶體驗(yàn),還要結(jié)合工作負(fù)載的檢測支持自適應(yīng)的調(diào)參服務(wù)。
基于ML的調(diào)優(yōu)方法分兩種:在選定基準(zhǔn)上執(zhí)行預(yù)先訓(xùn)練并傳遞(或微調(diào))給新客戶工作負(fù)載的知識(例如,OtterTune[3]和CDBTune[11]),以及通過使用優(yōu)化器迭代選擇配置[7,13,38],并與它們一起運(yùn)行工作負(fù)載來直接調(diào)優(yōu)新客戶工作負(fù)載。這些配置優(yōu)化器中使用的算法需要利用之前收集到的知識。Kanellis 等人[9]想要令人在不使用任何先驗(yàn)知識的情況下,且不需要將旋鈕進(jìn)行排序,通過合成旋鈕的方法找到重要旋鈕進(jìn)行調(diào)優(yōu),因此提出LlamaTune。LlamaTune調(diào)優(yōu)流程如下:首先,優(yōu)化程序使用當(dāng)前的知識庫,得到能夠用提高性能的配置,運(yùn)行DBMS 實(shí)例??刂破髡{(diào)用向DBMS 饋送查詢的工作負(fù)荷,工作負(fù)荷通常運(yùn)行若干,一旦工作負(fù)荷執(zhí)行完成,控制器收集性能數(shù)據(jù)和其他相關(guān)度量,并將它們轉(zhuǎn)發(fā)到知識庫,然后用觀察結(jié)果更新知識庫。Llama-Tune系統(tǒng)流程圖如圖6所示。
圖6 LlamaTune調(diào)優(yōu)過程Fig.6 LlamaTune tuning process
LlamaTune 利用隨機(jī)低維投影方法[41],配置空間從所有維度(D)到更低維度子空間(d)的投影,也就是對于用戶提供D維輸入配置空間XD,使用某個d維空間設(shè)計一個近似Xd,其中d?D,它可能包含至少一個點(diǎn)p′∈Xd,可以產(chǎn)生接近最優(yōu)的p*∈的性能XD。也就是構(gòu)建Xd、XD兩個空間之間的映射,即每個p∈XD都可以通過投影映射到某個點(diǎn)p′∈Xd。換句話說,如果低維空間大于目標(biāo)函數(shù)的有效維度,則可以僅通過調(diào)整較小空間來實(shí)現(xiàn)接近最優(yōu)的性能,然后使用優(yōu)化器調(diào)整更小的子空間。該空間作為輸入給出到BO[7,37-38,41]優(yōu)化器。
對于上述描述,提出了合成搜索空間(synthetic search spaces)的方法,在之前系統(tǒng)中,一個旋鈕往往對應(yīng)一個維度,這樣使每個維度都有一定實(shí)際意義。然而維度的意義對于優(yōu)化器來說不是重要的方面,因此提出了合成搜索空間方法,也就是人工合成維度,將多個維度合并成一個維度,合成旋鈕的一個值可以決定多個旋鈕值,雖然人工合成旋鈕本身沒有意義,但是可以實(shí)現(xiàn)降低維度,同時避免了識別重要旋鈕的需要。為了處理特殊值具有不同行為的旋鈕,LlamaTune系統(tǒng)還對特殊旋鈕的值進(jìn)行處理,將數(shù)值過大的離散型旋鈕進(jìn)行桶化處理,對于含有特殊值的旋鈕用偏置采樣的方法處理。
在實(shí)驗(yàn)中,文章使用了6 個具有不同特征的OLTP工作負(fù)載,并將LlamaTune 與普通的SMAC 進(jìn)行對比。首先,LlamaTune 達(dá)到基線SMAC 最佳配置平均快了5.62倍。其次,與普通SMAC相比,LlamaTune可以提高所有工作負(fù)載的平均最終吞吐量(100次迭代后),平均提高7.13%。TPC-C和SEATS這兩個復(fù)雜的OLTP工作負(fù)載都顯示出6%~7%的增長。最后,文章還觀察到LlamaTune 在YCSB-A、TPC-C 和Twitter 這3 個工作負(fù)載上都優(yōu)于基準(zhǔn)SMAC。
LlamaTune 系統(tǒng)改變了之前調(diào)優(yōu)系統(tǒng)的框架,沒有將旋鈕進(jìn)行排序,而是用一種隨機(jī)低維投影的方法將多個旋鈕合成為一個旋鈕,解決了通過排序方法選擇旋鈕準(zhǔn)確性低的問題。但LlamaTune系統(tǒng)未能在Linux系統(tǒng)上進(jìn)行調(diào)優(yōu),擴(kuò)展性較差。
Fekry等人[10]對實(shí)際配置調(diào)優(yōu)及其在數(shù)據(jù)分析框架中的部署進(jìn)行了分析,提出調(diào)優(yōu)成本攤銷模型,并論證了該模型在調(diào)優(yōu)經(jīng)常性工作負(fù)載時的優(yōu)勢,根據(jù)不同工作負(fù)載集提供全面的增量調(diào)優(yōu)解決方案。該模型是通過Gini評分作為指標(biāo)進(jìn)行旋鈕漸進(jìn)式選擇,逐步縮小配置空間。與OtterTune 類似,同樣采用工作負(fù)載映射框架來跨任務(wù)傳遞知識,提出Tuneful 模型。在重要參數(shù)調(diào)優(yōu)操作上,采用執(zhí)行敏感性分析(SA)[42]。每一輪SA中,都會刪除一些低影響參數(shù),以便在下一輪獲得高影響參數(shù)的更好信息。首先使用隨機(jī)森林回歸(RFR)構(gòu)建一個元模型來預(yù)測給定配置的執(zhí)行成本,與單一學(xué)習(xí)模型[43]相比,提高了預(yù)測精度。Tuneful 利用高斯過程(GP),GP 能夠使Tuneful 快速對不同配置下的執(zhí)行成本進(jìn)行建模。在相似度分析上Tuneful采用了一種相似感知的調(diào)優(yōu)方法,以進(jìn)一步適應(yīng)對高效配置調(diào)優(yōu)的需求。
Tuneful的設(shè)計是為了避免昂貴的離線階段進(jìn)行重要參數(shù)的識別或調(diào)優(yōu),將計算所有內(nèi)容作為增量優(yōu)化的一部分。文章通過在兩個不同的服務(wù)提供商提供amazon web services(AWS)[44]和谷歌cloud(GCP)[45]兩種云環(huán)境進(jìn)行大量的實(shí)驗(yàn)來說明它的適用性。并利用所獲得的經(jīng)驗(yàn)教訓(xùn)定義了一個實(shí)用的自動化優(yōu)化框架。該系統(tǒng)主要由3個組件組成,分別是性能分析配置器(significance analyzer)、成本分析器(cost modeler)和相似度分析器(similarity analyzer),由該系統(tǒng)的管理者(tuneful manager)控制。具體流程為:首先在搜索階段的開始,性能分析配置器選擇能快速探索某一特定工作負(fù)載的影響參數(shù)的配置,成本建模器就可以接管并構(gòu)建一個低維模型。然后,在調(diào)優(yōu)新工作負(fù)載時,相似度分析器通過重用現(xiàn)有信息進(jìn)一步降低了探索成本。當(dāng)工作負(fù)載提交執(zhí)行時,Tuneful建議使用由性能分析配置器生成的探索性配置,或者使用由成本建模器生成的調(diào)優(yōu)配置,再或者根據(jù)由相似度分析器生成的工作負(fù)載相似性從現(xiàn)有模型開始調(diào)優(yōu)。執(zhí)行之后,性能和成本指標(biāo)被反饋到Tuneful,然后它們被用來更新下一個配置的選項。隨著時間的推移,相似度分析器能夠匹配越來越多的工作負(fù)載,這大大提高了調(diào)優(yōu)速度。最后文章進(jìn)行了實(shí)驗(yàn)分析,證明了當(dāng)數(shù)據(jù)分析工作負(fù)載在動態(tài)環(huán)境中執(zhí)行時,增量配置調(diào)優(yōu)是正確的方法。
文章對比了Opentuner、Gunther、Random Search 與Tuneful 不同調(diào)優(yōu)算法查找最優(yōu)配置的搜索時間,結(jié)果表明Tuneful在4個基準(zhǔn)測試上用時都是最短的。
Tuneful雖然解決了之前未從成本效益上進(jìn)行調(diào)優(yōu)的問題,但Tuneful不適合特定的云場景。
OtterTune(GPR)適合低維數(shù)據(jù)集自動調(diào)優(yōu),它使用GPR 框架,會利用之前知識庫中的工作負(fù)載,在之后的調(diào)優(yōu)過程中,工作負(fù)載相似則可直接使用。OtterTune對每個支持DBMS 版本總結(jié)了一份“旋鈕”黑名單,包括了對調(diào)優(yōu)無關(guān)緊要的部分(比如保存數(shù)據(jù)文件的路徑),或者那些會產(chǎn)生嚴(yán)重或隱性后果(比如丟數(shù)據(jù))的部分,確保調(diào)優(yōu)能夠提高系統(tǒng)性能。
OtterTune(DNN)是OtterTune 的改進(jìn)版本,解決了OtterTune只能在低維或者少量的數(shù)據(jù)集上進(jìn)行調(diào)優(yōu)的問題,適合大數(shù)據(jù)集和高維數(shù)據(jù)自動調(diào)優(yōu)。
RelM 適用于分布式數(shù)據(jù)庫數(shù)據(jù)處理系統(tǒng),它可以自動調(diào)整內(nèi)存分配問題。降低基于BO[29]和DDPG[30]等算法探索最優(yōu)參數(shù)配置的開銷。
OnlineTune使用的在線調(diào)優(yōu),能夠適應(yīng)變化較快的工作負(fù)載,可以在不斷變化的云環(huán)境中安全地調(diào)整在線數(shù)據(jù)庫。OnlineTune適用于對安全性要求較高、工作負(fù)載變化較快的云環(huán)境中使用。
CGPTuner 適用于沒有任何歷史知識的數(shù)據(jù)庫,它解決了之前OtterTune系統(tǒng)需要收集歷史知識的問題。
ResTune 優(yōu)化資源的使用與性能,找出資源利用率最小的配置參數(shù),并且能夠讓它滿足相關(guān)協(xié)議。在資源較為緊缺的情況下,可以考慮使用此種方法。
LlamaTune 沒有像其他系統(tǒng)一樣使用旋鈕重要度排序的方法,而是創(chuàng)新將眾多旋鈕進(jìn)行合成,形成一個新的旋鈕,這樣避免了排序選出最重要的幾個旋鈕造成準(zhǔn)確率下降的問題。LlamaTune旋鈕選擇準(zhǔn)確率較高。
Tuneful 對分析引擎進(jìn)行調(diào)優(yōu),適用于工作負(fù)載變化較快的Spark 大數(shù)據(jù)分析引擎的性能優(yōu)化,能夠在最小時間內(nèi)達(dá)到最優(yōu)性能。該方法考慮了環(huán)境的動態(tài)特征,對不同的工作負(fù)載,采用了不同的ML技術(shù),提供全面的增量調(diào)優(yōu)解決方案,并且在實(shí)踐中能夠以成本效益方式調(diào)優(yōu)工作負(fù)載。
傳統(tǒng)機(jī)器學(xué)習(xí)具有較強(qiáng)的泛化能力,使得這類調(diào)參系統(tǒng)在不同數(shù)據(jù)庫環(huán)境下都有較好表現(xiàn)。此外,它能夠有效利用在歷史任務(wù)中學(xué)到的經(jīng)驗(yàn),應(yīng)用在未來調(diào)參工作中。但是,這類方法主要采用一種管道式架構(gòu),上一階段獲得的最優(yōu)解并不能保證是下一階段的最優(yōu)解,而且不同階段使用的模型未必可以很好地配合。其次,它需要大量高質(zhì)量的樣本用于訓(xùn)練模型,而這些樣本是很難拿到的。比如,數(shù)據(jù)庫表現(xiàn)受磁盤容量、CPU狀態(tài)、負(fù)載等很多因素的影響,很難去大量復(fù)現(xiàn)相似的場景。此外,僅僅使用高斯回歸等模型很難優(yōu)化數(shù)據(jù)庫調(diào)參這種有高維連續(xù)空間的問題。
針對上述傳統(tǒng)機(jī)器學(xué)習(xí)調(diào)參技術(shù)的缺點(diǎn),引入強(qiáng)化學(xué)習(xí)(RL)。RL提供了一種框架,使智能體(agent)能夠在特定場景(environment)中采取行動,并按離散時間在與環(huán)境的交互中學(xué)習(xí)。與傳統(tǒng)監(jiān)督學(xué)習(xí)不同,強(qiáng)化學(xué)習(xí)不需要大量的標(biāo)注數(shù)據(jù)。相反,通過不斷試錯和對智能體懲罰和獎勵,反復(fù)優(yōu)化行為選擇的策略,以最大化目標(biāo)函數(shù)。通過探索和開發(fā)機(jī)制,強(qiáng)化學(xué)習(xí)可以在探索未知空間和開發(fā)現(xiàn)有知識之間做出權(quán)衡。表3 給出基于RL的參數(shù)調(diào)優(yōu)方法對比。
表3 基于RL參數(shù)調(diào)優(yōu)方法對比Table 3 Comparison of tuning methods based on RL parameters
由于不同的數(shù)據(jù)庫實(shí)例和查詢負(fù)載的不同,這使得數(shù)據(jù)庫管理員(DBA)的工作變得非常困難。現(xiàn)有的自動DBMS配置調(diào)優(yōu)解決方案有幾個局限性。首先,它們采用流水線學(xué)習(xí)模型,不能以端到端的方式優(yōu)化整體性能。其次,它們依賴于難以獲得的大規(guī)模高質(zhì)量訓(xùn)練樣本。再次,現(xiàn)有的方法不能為大量的旋鈕推薦合理的配置在如此高維連續(xù)空間中的旋鈕。在云環(huán)境下,現(xiàn)有的方法很難適應(yīng)硬件配置和工作負(fù)載的變化,適應(yīng)性差。針對上述問題,Zhang 等人[11,46]基于DRL 提出端到端的數(shù)據(jù)庫管理系統(tǒng)配置自動調(diào)整系統(tǒng)CDBTune,該系統(tǒng)能夠在復(fù)雜云環(huán)境中對旋鈕設(shè)置進(jìn)行重新調(diào)整。CDBTune使用深度強(qiáng)化學(xué)習(xí)(RL),利用深度確定性策略梯度法(deep deterministic policy gradient,DDPG)在高維連續(xù)空間中尋找最優(yōu)配置?;谠囧e思想,以有限樣本學(xué)習(xí)旋鈕設(shè)置,完成初始訓(xùn)練,減少了采集大量高質(zhì)量樣本的必要性。并且采用RL 中的獎賞-反饋機(jī)制代替?zhèn)鹘y(tǒng)的回歸,實(shí)現(xiàn)端到端學(xué)習(xí),加快了收斂速度提高了在線調(diào)優(yōu)的效率。CDBTune 系統(tǒng)優(yōu)先體驗(yàn)回放,以加速模型的收斂,并探索如何減少耗時的重啟時間,從而在實(shí)際使用中為用戶提供更好的體驗(yàn)。
CDBTune 系統(tǒng)是最早采用上述的深度確定性策略梯度算法的。該算法是在連續(xù)動作空間環(huán)境中搜索最優(yōu)策略的一種深度強(qiáng)化學(xué)習(xí)算法。DDPG由3個組件組成:actor、critic 和replay memory。actor 根據(jù)給定的狀態(tài)選擇一個動作(例如,對一個旋鈕使用什么值)。critic根據(jù)狀態(tài)對選定的動作(即旋鈕值)進(jìn)行評估,并且提供反饋來指導(dǎo)actor。actor 的輸入是DBMS 的度量,輸出推薦的旋鈕值。critic將之前的度量和推薦的旋鈕作為輸入,輸出一個Q值,DDPG神經(jīng)網(wǎng)絡(luò)的Q值計算的是對未來所有預(yù)期獎勵的疊加。replay memory存儲按預(yù)測誤差降序排列的訓(xùn)練數(shù)據(jù)。對于每個旋鈕k,DDPG構(gòu)造一個元組。在接收到一個新的數(shù)據(jù)時,CDBTune首先通過比較當(dāng)前、歷史和初始目標(biāo)值來計算獎勵。訓(xùn)練時從memory中獲取一個小批量排名靠前的tuple,并通過反向傳播更新actor 和critic 的權(quán)重。最后,CDBTune 將當(dāng)前度量m輸入actor 以獲得下一旋鈕k_next的推薦。
上述CDBTune調(diào)優(yōu)的工作過程主要分為離線訓(xùn)練和在線調(diào)優(yōu)兩個步驟。離線訓(xùn)練就是用一些標(biāo)準(zhǔn)的負(fù)載生成器對數(shù)據(jù)庫進(jìn)行壓測,邊收集訓(xùn)練數(shù)據(jù),邊訓(xùn)練一個初步的配置推薦模型。當(dāng)用戶或者DBA有數(shù)據(jù)庫性能優(yōu)化需求時,可以通過相應(yīng)的交互接口提出在線調(diào)參優(yōu)化請求,此時云端的控制器通過給智能優(yōu)化系統(tǒng)發(fā)出在線調(diào)參請求,并根據(jù)用戶真實(shí)負(fù)載對之前建立好的初步模型進(jìn)行微調(diào),然后將模型微調(diào)后推薦出的相應(yīng)的參數(shù)配置在數(shù)據(jù)庫中進(jìn)行設(shè)置。反復(fù)執(zhí)行上述過程,直到待調(diào)參的數(shù)據(jù)庫性能滿足用戶或系統(tǒng)管理員的需求即停止調(diào)參,如圖7所示。
圖7 CDBTune調(diào)優(yōu)流程Fig.7 CDBTune tuning process
在多種不同負(fù)載和不同類型的數(shù)據(jù)庫下進(jìn)行的大量實(shí)驗(yàn)證明,CDBTune 性能優(yōu)化結(jié)果明顯優(yōu)于目前已有數(shù)據(jù)庫調(diào)優(yōu)工具和DBA 專家。即使在云環(huán)境下,用戶數(shù)據(jù)庫內(nèi)存、磁盤大小發(fā)生變化或負(fù)載發(fā)生變化(類型不變)的情況下,實(shí)驗(yàn)證明CDBTune依然保持了較好的適應(yīng)能力。文章將CDBTune 與BestConfig、DBA 和OtterTune 進(jìn)行對比,發(fā)現(xiàn)CDBTune 比其他三者的吞吐量更高,延遲率更低。
CDBTune 是使用RL 進(jìn)行調(diào)優(yōu)的先驅(qū),改正了基于BO 算法推薦配置有一定誤差,以及需要大量高質(zhì)量經(jīng)驗(yàn)數(shù)據(jù)進(jìn)行模型訓(xùn)練的缺點(diǎn)。CDBTune 使用DDPG 算法,該系統(tǒng)能夠在復(fù)雜云環(huán)境中對旋鈕設(shè)置進(jìn)行重新調(diào)整,并且利用DRL 對系統(tǒng)旋鈕進(jìn)行調(diào)優(yōu)的工作具有開創(chuàng)性,但在結(jié)構(gòu)設(shè)計上還需要進(jìn)一步改進(jìn)。
首先,CDBTune直接使用DRL與系統(tǒng)交互,沒有利用當(dāng)前的工作負(fù)載特性,其次,CDBTune 只為3 種工作負(fù)載(只讀、只寫和讀寫)提供粗粒度調(diào)優(yōu),無法為特定查詢工作負(fù)載提供細(xì)粒度調(diào)優(yōu)。
CDBTune 需要較長的調(diào)優(yōu)時間才能通過自我學(xué)習(xí)達(dá)到較高的性能。對此,CDB團(tuán)隊提出了Hunter[12]能夠在保證調(diào)優(yōu)效果的前提下極大地縮減調(diào)優(yōu)耗時。
Hunter 是一個用于CDB 的在線調(diào)優(yōu)服務(wù)。首先,Controller 與目標(biāo)DBMS、調(diào)優(yōu)系統(tǒng)和用戶交互。它由Actor 和CDB 組成,其中Actor 被設(shè)計用于從DBMS 收集運(yùn)行時信息,克隆CDB 上的用戶實(shí)例,并管理克隆CDB上的并行執(zhí)行。而在經(jīng)典架構(gòu)中,例如CDBTune,Controller只與單個CDB實(shí)例進(jìn)行交互。而Hunter中的Controller 管理一個Actor 集合,每個Actor 管理一個從用戶實(shí)例克隆的CDBS 集合。改進(jìn)的混合調(diào)優(yōu)系統(tǒng)Hunter,主要包含樣本生成、搜索空間優(yōu)化、深度推薦3個階段。
在樣本生成階段,由于基于學(xué)習(xí)的調(diào)優(yōu)方法在訓(xùn)練初期都有著調(diào)優(yōu)效果差、收斂速度慢等問題(冷啟動問題)。這些方法面臨冷啟動問題主要是因?yàn)闃颖緮?shù)量少質(zhì)量差,網(wǎng)絡(luò)難以快速學(xué)到正確的探索方向,或者搜索空間大,網(wǎng)絡(luò)結(jié)構(gòu)復(fù)雜,學(xué)習(xí)速度緩慢。為了緩解上述問題,Hunter采用收斂速度更快的啟發(fā)式方法(如:遺傳算法(GA))進(jìn)行初期的調(diào)優(yōu),以此快速獲得高質(zhì)量的樣本。啟發(fā)式方法雖有著較快的收斂速度,但是卻容易收斂到局部最優(yōu),導(dǎo)致最終調(diào)優(yōu)效果不佳。而基于學(xué)習(xí)的方法卻在較長的調(diào)優(yōu)時間后可以得到較高的性能,但是卻需要較長的訓(xùn)練時間,速度較慢。Hunter將兩種方法結(jié)合,既加快了調(diào)優(yōu)速度,也確保了參數(shù)質(zhì)量,獲得高質(zhì)量樣本。樣本生成階段是根據(jù)目標(biāo)工作負(fù)載和用戶需求,通過GA和規(guī)則生成樣本。規(guī)則是由用戶或DBA定義的限制,包括哪些旋鈕是固定的,以及其他旋鈕允許調(diào)整的范圍。在不同規(guī)則下,預(yù)訓(xùn)練的模型很難推薦令人滿意的配置。
在搜索空間優(yōu)化階段,文章利用樣本生成階段可以獲得較多高質(zhì)量的樣本,但是卻沒有將其效果充分發(fā)揮。Hunter 利用PCA 進(jìn)行狀態(tài)空間降維,隨機(jī)森林(random forests)進(jìn)行參數(shù)重要性排序。PCA是一種常用的機(jī)器學(xué)習(xí)的降維方法,可將高維數(shù)據(jù)降為低維數(shù)據(jù)的同時保留大部分信息。系統(tǒng)采用累計方差貢獻(xiàn)率來衡量信息的保留度,一般來說,當(dāng)累計方差貢獻(xiàn)率大于90%時即可認(rèn)為信息得到了完全的保留。Hunter 選擇貢獻(xiàn)率最大的兩個成分,并以此作為x、y軸描點(diǎn),以其對應(yīng)的數(shù)據(jù)庫性能作為點(diǎn)的顏色(顏色越深性能越低),由此低性能的點(diǎn)可以被兩個成分較為明顯地區(qū)分開來。隨機(jī)森林可以被用來計算特征的重要性,以數(shù)據(jù)庫參數(shù)為輸入,對應(yīng)的數(shù)據(jù)庫性能為輸出訓(xùn)練隨機(jī)森林模型,然后計算各個數(shù)據(jù)庫參數(shù)的重要性,并進(jìn)行排序。采用不同數(shù)量的Top 參數(shù)進(jìn)行參數(shù)調(diào)優(yōu)可以看到數(shù)據(jù)庫最優(yōu)性能的變化,在一定數(shù)量的樣本保證下,TPC-C負(fù)載調(diào)整20 個參數(shù)即可達(dá)到較高的性能??偟膩碚f,搜索空間優(yōu)化階段是將樣本工廠生成的樣本作為輸入,對指標(biāo)和搜索空間進(jìn)行壓縮和降維。
深度推薦階段利用之前階段的信息進(jìn)行維度優(yōu)化和強(qiáng)化學(xué)習(xí)預(yù)訓(xùn)練,保證調(diào)優(yōu)效果的同時顯著減少調(diào)優(yōu)時間。具體來說,在深度推薦階段采用深度強(qiáng)化學(xué)習(xí)(DRL)來進(jìn)行參數(shù)推薦。首先,搜索空間優(yōu)化的結(jié)果會對DRL的網(wǎng)絡(luò)進(jìn)行優(yōu)化,減少其輸入輸出的維度,簡化網(wǎng)絡(luò)結(jié)構(gòu)。其次,樣本生成階段的樣本將加入DRL 的經(jīng)驗(yàn)池中,由DRL進(jìn)行一定程度的預(yù)訓(xùn)練。最后,DRL將基于改進(jìn)后的探索策略進(jìn)行參數(shù)配置推薦。DRL 的基本結(jié)構(gòu)與CDBTune 類似,為了充分利用高質(zhì)量的歷史數(shù)據(jù),文章修改了其探索策略。為了進(jìn)一步對調(diào)優(yōu)過程進(jìn)行加速,Hunter充分利用CDB的克隆技術(shù),采用多臺數(shù)據(jù)庫實(shí)例實(shí)現(xiàn)并行化,令整個調(diào)優(yōu)時間更進(jìn)一步地減少。
文章將CDBTune 與BestConfig、GA(遺傳算法)和OtterTune 進(jìn)行對比,結(jié)果顯示了每種方法在MySQL 上測試TPCC 獲得的最佳吞吐量和最佳延遲曲線。結(jié)果表明Hunter能夠在更短的時間內(nèi)獲得55%~65%的最佳性能。特別是使20個克隆的CDB,Hunter-20能夠在2.5小時內(nèi)實(shí)現(xiàn)最佳性能,這減少了94%~95%的推薦時間。
Hunter 解決了CDBTune 調(diào)優(yōu)時間長的問題,能夠在保證調(diào)優(yōu)效果的前提下極大地縮減調(diào)優(yōu)耗時,但Hunter難以快速判斷性能是否達(dá)到“最優(yōu)”。
Ge 等人[14]提到傳統(tǒng)的參數(shù)調(diào)優(yōu)是由DBA 進(jìn)行的,但DBA 可以調(diào)整的旋鈕數(shù)量是有限的,很難在全局范圍內(nèi)找到更好的旋鈕。DBA通常擅長調(diào)優(yōu)他們熟悉的系統(tǒng)類型,并且由于系統(tǒng)可以構(gòu)建在不同的環(huán)境中(如本地或云、CPU、RAM、磁盤),DBA 需要長時間調(diào)優(yōu)不同環(huán)境下的系統(tǒng),嚴(yán)重影響調(diào)優(yōu)效率。工作負(fù)載通常以dy-namal方式連續(xù)變化。因此,不斷變化的工作負(fù)載也要求DBA 始終動態(tài)地調(diào)整旋鈕以獲得高性能。在3.1節(jié)提到的CDBTune,是最早使用強(qiáng)化學(xué)習(xí)來處理調(diào)優(yōu)問題的系統(tǒng),但它存在很多問題,首先,CDBTune 不能很好地適應(yīng)工作負(fù)載的變化,只提供粗粒度的調(diào)優(yōu)。CDBTune 只對3 種工作負(fù)載進(jìn)行分類(只讀、只寫和讀寫)。其次,CDBTune 重新修復(fù)旋鈕需要重新啟動系統(tǒng),影響系統(tǒng)的穩(wěn)定性。再次,CDBTune 的核心算法DDPG沒有利使用工作負(fù)載特性。
針對上述問題,文章提出了一個基于注意力深度強(qiáng)化學(xué)習(xí)的調(diào)優(yōu)系統(tǒng)WATuning,該系統(tǒng)能夠適應(yīng)工作負(fù)載特性的變化,高效、有效地優(yōu)化系統(tǒng)性能,也能夠服務(wù)于數(shù)據(jù)庫以及其他系統(tǒng)。首先,文章設(shè)計了WATuning的核心算法ATT-Tune來完成系統(tǒng)的調(diào)諧任務(wù)。ATT-Tune是在深度確定性策略梯度(DDPG)[30,47]的基礎(chǔ)上設(shè)計的。CDBTune[11]的弱點(diǎn)之一是其核心算法(DDPG)沒有使用工作負(fù)載特性。所以在核心算法ATT-Tune 中,文章考慮了不同的工作負(fù)載對系統(tǒng)內(nèi)部狀態(tài)的影響。并利用深度神經(jīng)網(wǎng)絡(luò)構(gòu)建注意力機(jī)制模塊,生成狀態(tài)權(quán)重矩陣,使系統(tǒng)在不同工作負(fù)載下的內(nèi)部狀態(tài)根據(jù)重要性得到不同的權(quán)重值。文章使用并改進(jìn)了CDBTune中應(yīng)用的獎勵函數(shù),增加了一個公差因子和一個公差間隔,以保證推薦的旋鈕值在實(shí)際環(huán)境中的可用性。其次,文章將注意力機(jī)制模塊和DDPG看作一個整體一起訓(xùn)練,大大降低了神經(jīng)網(wǎng)絡(luò)訓(xùn)練的難度。最后,針對實(shí)際應(yīng)用場景,設(shè)計了一種動態(tài)的自微調(diào)方案,使WATuning更符合實(shí)際工作負(fù)載,從而實(shí)現(xiàn)對旋鈕的重新調(diào)整,使系統(tǒng)更加使用實(shí)際工作負(fù)載。
WATuning系統(tǒng)調(diào)優(yōu)流程如下:在訓(xùn)練階段,首先使用性能測試模塊生成工作負(fù)載,并將工作負(fù)載應(yīng)用到系統(tǒng)模塊。然后將工作負(fù)載和內(nèi)部狀態(tài)傳遞給控制器,控制器將分類完成的工作負(fù)載和內(nèi)部狀態(tài)傳遞給自動調(diào)諧模塊。性能測試模塊對系統(tǒng)模塊進(jìn)行監(jiān)控,獲取系統(tǒng)的吞吐量和延遲率作為外部度量,并將外部度量傳遞給自動調(diào)諧模塊。自動調(diào)諧模塊采集上述步驟傳遞的參數(shù)并進(jìn)行訓(xùn)練,并向系統(tǒng)推薦旋鈕配置。重復(fù)上述步驟,直到自動調(diào)諧模塊的內(nèi)部核心算法收斂。
在推薦階段,系統(tǒng)模塊將實(shí)際工作負(fù)載和狀態(tài)傳遞給自動調(diào)優(yōu)模塊,然后自動調(diào)諧模塊向系統(tǒng)模塊推薦高性能旋鈕配置。
文章最后對該系統(tǒng)進(jìn)行實(shí)驗(yàn),結(jié)果表明,WATuning的吞吐量和延遲率要比現(xiàn)有的最優(yōu)調(diào)諧方法CDBTune的吞吐量和延遲率分別提高52.6%和13%。
WATuning 改正了CDBTune 不能很好地適應(yīng)工作負(fù)載的變化、沒有利用對系統(tǒng)參數(shù)推薦的工作負(fù)載特性等缺點(diǎn),考慮了不同工作負(fù)載對系統(tǒng)內(nèi)部狀態(tài)的影響。WATuning 利用深度神經(jīng)網(wǎng)絡(luò)構(gòu)建注意力機(jī)制模塊,生成狀態(tài)權(quán)重矩陣,使系統(tǒng)在不同工作負(fù)載下的內(nèi)部狀態(tài)根據(jù)重要性得到不同的權(quán)重值。
CDBTune 使用深度強(qiáng)化學(xué)習(xí)(DRL)通過試錯策略來調(diào)優(yōu)數(shù)據(jù)庫。然而,CDBTune 需要在數(shù)據(jù)庫中多次運(yùn)行SQL查詢工作負(fù)載以獲得適當(dāng)?shù)呐渲?,這十分耗費(fèi)時間。并且CDBTune 只提供粗粒度的調(diào)優(yōu)(即針對只讀工作負(fù)載、讀寫工作負(fù)載、只寫工作負(fù)載的調(diào)優(yōu)),但不能提供細(xì)粒度的調(diào)優(yōu)(即針對特定查詢工作負(fù)載的調(diào)優(yōu))。其次它直接使用現(xiàn)有的DRL模型,該模型假設(shè)環(huán)境只能受到重新配置操作的影響,不能利用查詢信息。
基于CDBTune 上述不足之處,Li 等人[13]提出了一種基于深度強(qiáng)化學(xué)習(xí)查詢感知的自動調(diào)參系統(tǒng)QTune,從3個方面解決CDBTune中遺留的問題。首先,為了提高參數(shù)配置對不同負(fù)載的適應(yīng)能力,QTune在查詢計劃級別對負(fù)載特征(如讀寫比例、使用的關(guān)系表、執(zhí)行代價等)進(jìn)行編碼,對執(zhí)行開銷做預(yù)估計。其次,為了進(jìn)一步提高調(diào)參表現(xiàn),QTune采用了一種面向調(diào)參問題的深度強(qiáng)化學(xué)習(xí)算法(double-state deep deterministic policy gradient,DS-DDPG),不僅基于Actor-Critic 算法,提高訓(xùn)練效率,而且在強(qiáng)化學(xué)習(xí)的狀態(tài)特征中綜合負(fù)載、數(shù)據(jù)庫狀態(tài)指標(biāo)、當(dāng)前參數(shù)值等特征,提高調(diào)參策略的準(zhǔn)確度和適應(yīng)能力。再次,為了更好地滿足不同用戶對數(shù)據(jù)庫性能的需求(如低延遲、高吞吐量等),先對所有用戶負(fù)載根據(jù)參數(shù)偏好進(jìn)行聚類,然后對相同類中的查詢做批量調(diào)參和執(zhí)行,從而平衡吞吐量和延遲兩方面的需求。
對于上述QTune 提出了一種深度確定性策略梯度(DS-DDPG)模型使用Actor-Critic 網(wǎng)絡(luò)。DS-DDPG 模型可以根據(jù)數(shù)據(jù)庫狀態(tài)和查詢信息學(xué)習(xí)Actor-Critic 策略,自動解決調(diào)優(yōu)問題。此外,QTune 吸收了SQL 查詢的豐富特性,并為SQL 語句提供了系統(tǒng)的三個調(diào)優(yōu)粒度。第一個是查詢級調(diào)優(yōu),它為每個SQL查詢找到一個很好的配置。這種方法不能并行運(yùn)行SQL查詢,可以實(shí)現(xiàn)低延遲,但吞吐量較低。第二個是工作負(fù)載級調(diào)優(yōu),它為查詢工作負(fù)載找到很好的配置但無法為每個SQL查詢找到好的配置。這種方法能夠?qū)崿F(xiàn)低吐量但延遲高。第三種是集群級調(diào)優(yōu),它將查詢集群到幾個組中,并為每個組中的查詢找到一個良好的數(shù)據(jù)庫配置。這種方法實(shí)現(xiàn)高吞吐量和低延遲,因?yàn)樗梢詾橐唤M查詢找到良好的配置,并在每個組中并行運(yùn)行查詢。因此,QTune 可以根據(jù)給定的需求在延遲和吞吐量之間進(jìn)行權(quán)衡,并同時提供粗粒度調(diào)優(yōu)和細(xì)粒度調(diào)優(yōu)。文章還提出了一種基于深度學(xué)習(xí)的查詢聚類方法,根據(jù)查詢匹配配置的相似性對查詢進(jìn)行分類。
QTune系統(tǒng)具體調(diào)優(yōu)流程如下:首先客戶機(jī)與Controller交互以提出調(diào)優(yōu)請求。Query2Vector將每個查詢定義為一個向量。它首先分析SQL查詢,從數(shù)據(jù)庫引擎中提取查詢計劃和每個查詢的估計成本,并使用這些信息生成一個向量?;谔卣飨蛄?,Tuner 推薦適當(dāng)?shù)男o,然后數(shù)據(jù)庫根據(jù)新的旋鈕值執(zhí)行這些查詢。調(diào)諧器使用深強(qiáng)化模型DS-DDPG 來調(diào)整模型,并推薦連續(xù)旋鈕值作為新的配置。Tuner還需要使用訓(xùn)練數(shù)據(jù)來訓(xùn)練模型,這些數(shù)據(jù)存儲在training data 存儲庫中。對于查詢級調(diào)優(yōu),Query2Vector 為給定查詢生成一個特征向量。調(diào)諧器采用這個矢量作為輸入,并建議連續(xù)的旋鈕值,系統(tǒng)根據(jù)推薦的旋鈕值執(zhí)行查詢。對于工作負(fù)載級調(diào)優(yōu),Query2Vector為工作負(fù)載中的每個查詢生成一個特征向量,并將它們合并成一個統(tǒng)一的向量。調(diào)諧器采用這個統(tǒng)一的矢量作為輸入,并建議旋鈕值。對于集群級調(diào)優(yōu),Query2Vector首先為每個查詢生成一個特征向量,Tuner 學(xué)習(xí)每個查詢的配置模式,但這個過程代價較高。為了提高性能,文章提出了一種深度學(xué)習(xí)模型Vector2Pattern,它學(xué)習(xí)旋鈕的離散值。然后Pattern2Cluster根據(jù)離散配置模式對這些查詢進(jìn)行聚類,得到查詢組。對于每個查詢組,Tuner推薦適當(dāng)?shù)呐渲?,然后?shù)據(jù)庫依據(jù)新的旋鈕值在組中執(zhí)行這些查詢。
文章最后將QTune的性能與數(shù)據(jù)庫默認(rèn)設(shè)置、Best-Config、OtterTune、DBA以及CDBTune進(jìn)行對比。QTune在所有情況下都實(shí)現(xiàn)了最佳性能。比如:與CDBTune相比,QTune的吞吐量提高了151.10%,延遲減少了60.18%,訓(xùn)練時間減少了66.15%。
QTune 解決了CDBTune 多次運(yùn)行負(fù)載耗時的問題、不能針對特定查詢工作負(fù)載調(diào)優(yōu)以及只提供粗粒度的調(diào)優(yōu)的問題,對DRL 模型進(jìn)行了改進(jìn)。首先,QTune吸收了SQL 查詢的豐富特性,并為SQL 語句提供了系統(tǒng)的3個調(diào)優(yōu)粒度(查詢級、工作負(fù)載級和集群級)。其次,模型利用查詢特征(工作負(fù)載)預(yù)測系統(tǒng)內(nèi)部狀態(tài)的變化值ΔS。但是,系統(tǒng)需要收集真實(shí)環(huán)境中產(chǎn)生的大量的ΔS來訓(xùn)練一個神經(jīng)網(wǎng)絡(luò),這是一個耗時的過程。此外,DRL模型中系統(tǒng)的當(dāng)前內(nèi)部狀態(tài)依賴于以前的狀態(tài)。如果對ΔS的預(yù)測稍有偏差,則累積的迭代的結(jié)果也會出現(xiàn)極大的誤差。因此,對訓(xùn)練模型的精度要求也極為嚴(yán)格。
CDBTune 使用端到端的方式優(yōu)化,并且能夠在復(fù)雜的云環(huán)境中對旋鈕設(shè)置進(jìn)行調(diào)整。Hunter 是CDBTune 的延伸版本,在保證調(diào)優(yōu)效果的同時縮短CDBTune 調(diào)優(yōu)的時間,并且不需要依賴于高質(zhì)量的訓(xùn)練樣本,可以為高維連續(xù)空間中大量旋鈕推薦合理配置,更適合高維連續(xù)空間內(nèi)進(jìn)行調(diào)優(yōu)。
WATuning 能夠適應(yīng)工作負(fù)載的變化的特征,修改后的旋鈕值不需要進(jìn)行重啟系統(tǒng)。系統(tǒng)還可以根據(jù)工作負(fù)載的變化生成多個實(shí)例模型,從而可以針對不同類型的工作負(fù)載完成針對性的推薦服務(wù),適合工作負(fù)載較多,變化復(fù)雜的場景。
QTune 提供了3 種級別的調(diào)優(yōu):第一種是查詢級調(diào)優(yōu),它為每個SQL查詢找到一個很好的配置。這種方法實(shí)現(xiàn)低延遲,但吞吐量也會低。第二種是工作負(fù)載級調(diào)優(yōu),它為查詢工作負(fù)載找到一個很好的配置,可以實(shí)現(xiàn)高吞吐量但延遲也高。第三種是集群級調(diào)優(yōu),這種方法可以實(shí)現(xiàn)高吞吐量和低延遲。因此,QTune可以根據(jù)給定的需求在延遲和吞吐量之間進(jìn)行權(quán)衡,同時提供粗粒度調(diào)優(yōu)和細(xì)粒度調(diào)優(yōu)。QTune 還提出了一種基于深度學(xué)習(xí)的查詢聚類方法,根據(jù)查詢匹配配置的相似性對查詢進(jìn)行分類。
(1)listen_addresses:指定PostgreSQL服務(wù)器監(jiān)聽的網(wǎng)絡(luò)地址。
(2)port:指定PostgreSQL服務(wù)器監(jiān)聽的端口號。
(3)max_connections:限制并發(fā)連接的最大數(shù)量。
(4)max_locks_per_transaction:限制每個事務(wù)所能獲取的最大鎖數(shù)。
(5)deadlock_timeout:指定檢測死鎖的超時時間。
(6)vacuum_cost_delay 和vacuum_cost_page_hit:控制VACUUM操作的成本計算和延遲。
(1)shared_buffers:指定共享緩沖區(qū)的大小,用于存儲經(jīng)常訪問的數(shù)據(jù)塊。
(2)work_mem:指定每個查詢操作使用的內(nèi)存量。
(3)effective_cache_size:指定系統(tǒng)的有效緩存大小。
(4)data_directory:指定PostgreSQL數(shù)據(jù)目錄的路徑。
(5)temp_tablespaces:指定用于存儲臨時表的表空間。
(6)max_wal_size和min_wal_size:指定WAL(writeahead log)的最大和最小大小。
(1)log_destination:指定日志輸出的目標(biāo),如文件、控制臺或系統(tǒng)日志。
(2)logging_collector:啟用日志收集器,將日志寫入到指定的日志文件中。
(3)log_rotation_age 和log_rotation_size:控制日志文件的輪換方式。
(1)password_encryption:指定密碼加密算法。
(2)ssl:啟用或禁用SSL/TLS 加密。
(3)pg_hba.conf:配置客戶端身份驗(yàn)證規(guī)則。
(1)effective_io_concurrency:指定磁盤I/O 操作的并發(fā)數(shù)量。
(2)random_page_cost 和seq_page_cost:用于計算查詢計劃中不同類型訪問的成本。
(3)max_parallel_workers 和max_parallel_workers_per_gather:指定并行查詢執(zhí)行的最大工作進(jìn)程數(shù)。
(4)max_parallel_maintenance_workers:指定并行維護(hù)工作進(jìn)程的最大數(shù)量。
(5)enable_seqscan和enable_indexscan:控制查詢計劃中順序掃描和索引掃描的使用。
(1)archive_mode 和archive_command:配置歸檔模式和歸檔命令。
(2)wal_level:指定寫入WAL(write-ahead log)的詳細(xì)程度。
(3)restore_command:配置恢復(fù)命令。
(4)max_wal_senders:指定可用于流復(fù)制的最大WAL 發(fā)送者數(shù)量。
(5)synchronous_commit:指定是否使用同步提交來確保事務(wù)持久性。
近年來,數(shù)據(jù)庫參數(shù)調(diào)優(yōu)與機(jī)器學(xué)習(xí)結(jié)合得到廣泛關(guān)注,并取得一系列研究成果。本文首先闡述傳統(tǒng)參數(shù)調(diào)優(yōu)存在的問題,然后給出學(xué)習(xí)式調(diào)優(yōu)方法,包括基于BO 模型的參數(shù)調(diào)優(yōu)以及基于RL 的參數(shù)調(diào)優(yōu)。機(jī)器學(xué)習(xí)與數(shù)據(jù)庫參數(shù)調(diào)優(yōu)的結(jié)合包括3種方式:第一種方式是針對基于DDPG框架的模型,如CDBTune[11]、Hunter[12]等,利用深度強(qiáng)化學(xué)習(xí)提高參數(shù)調(diào)優(yōu)質(zhì)量;第二種方式是基于高斯的模型,如OtterTune(GPR)[3]、ResTune[8]等;第三種方式是針對分布式環(huán)境,如RelM[5],SmartPS[48]等模型,以及使用新的參數(shù)服務(wù)器框架[49]來解決分布式機(jī)器學(xué)習(xí)問題,能夠提升參數(shù)調(diào)優(yōu)的效率[50-51]。最后,本文對數(shù)據(jù)庫參數(shù)調(diào)優(yōu)在如下方面做出展望。
當(dāng)前學(xué)習(xí)式參數(shù)調(diào)優(yōu)模型可解釋性差,無法捕捉問題路徑。建議結(jié)合因果推理模型進(jìn)行解決。雖然現(xiàn)在機(jī)器學(xué)習(xí)、深度學(xué)習(xí)等方面的內(nèi)容已經(jīng)被廣泛研究,且應(yīng)用到日常生活中能夠提高生活質(zhì)量。上述的數(shù)據(jù)庫調(diào)優(yōu)系統(tǒng),目前大多數(shù)的研究也與機(jī)器學(xué)習(xí)、強(qiáng)化學(xué)習(xí)相結(jié)合,但機(jī)器學(xué)習(xí)、深度學(xué)習(xí)模型也不是完美的。其一,很多機(jī)器學(xué)習(xí)、深度學(xué)習(xí)訓(xùn)練出來的內(nèi)容缺乏適用性,也就是缺乏泛化的能力,需要不斷的訓(xùn)練新方向的內(nèi)容,才能夠擁有更好的適用性。而因果推理恰恰彌補(bǔ)了這方面的不足,訓(xùn)練一個模型,能夠根據(jù)經(jīng)驗(yàn)、規(guī)律泛化到另一個模型之中。其二,機(jī)器學(xué)習(xí)普遍存在可解釋性差的問題,可解釋性差導(dǎo)致很多時候不知道如何優(yōu)化一個模型。因果推理恰恰可以降低機(jī)器學(xué)習(xí)可解釋性差的問題,所以將數(shù)據(jù)庫學(xué)習(xí)與因果推理相結(jié)合也是一個趨勢。
隨著機(jī)器學(xué)習(xí)的使用越來越普遍,數(shù)據(jù)規(guī)模與業(yè)務(wù)訪問的負(fù)載也越來越大,越來越多的公司企業(yè)無法依賴于單個數(shù)據(jù)庫服務(wù)器來支撐起服務(wù)。且訓(xùn)練的數(shù)據(jù)量和模型的不斷增長,單個服務(wù)器也很難進(jìn)行訓(xùn)練數(shù)據(jù),因此研究分布式數(shù)據(jù)處理很有必要。目前也有一些學(xué)者研究數(shù)據(jù)庫分布式系統(tǒng)[5,47-48],例如,前文所介紹的REIM[5]研究的分布式系統(tǒng)方面的內(nèi)容,實(shí)現(xiàn)自動內(nèi)存分配。但有學(xué)者指出這些現(xiàn)有的研究大多數(shù)基于獨(dú)立的服務(wù)器,或者搭載在主流的分布式機(jī)器學(xué)習(xí)系統(tǒng)上,并且許多現(xiàn)有的數(shù)據(jù)庫系統(tǒng)利用并行性可以實(shí)現(xiàn)更高的性能[49-50]。在這個趨勢下,研究分布式數(shù)據(jù)庫的參數(shù)調(diào)優(yōu)系統(tǒng)是很有必要的。
現(xiàn)代的數(shù)據(jù)庫系統(tǒng)有很多種類型,如關(guān)系型數(shù)據(jù)庫,非關(guān)系型數(shù)據(jù)庫(NoSQL)以及時序數(shù)據(jù)庫等。未來研究可以尋找通用的性能優(yōu)化的方法。對于異構(gòu)存儲的場景,考慮利用更好的緩存管理與外部池技術(shù),比如可以考慮GPU與NVM等介質(zhì)加速查詢優(yōu)化的方法。
隨著企業(yè)逐漸將數(shù)據(jù)中心轉(zhuǎn)移到云環(huán)境中,管理分布式數(shù)據(jù)和配置成為一個非常重要的問題。因此未來研究可以著手研究如何有效的管理分布在云上的數(shù)據(jù)庫系統(tǒng),優(yōu)化數(shù)據(jù)傳輸?shù)乃俣?,降低?fù)雜度提高可用性等。
數(shù)據(jù)庫有效利用資源也是目前很多人研究的重點(diǎn),目前利用容器技術(shù)(如Docker)部署應(yīng)用程序和數(shù)據(jù)庫服務(wù)已經(jīng)成為了一種普遍的做法。未來的研究將探索如何利用容器組織數(shù)據(jù)庫資源,并使用自動化工具進(jìn)行配置和調(diào)整,以提高性能、可移植性和靈活性,提高資源的利用率。