?

基于機器學習的數據庫系統參數優化方法綜述

2024-01-22 10:58高宇飛李翠霞陶永才
鄭州大學學報(工學版) 2024年1期
關鍵詞:數據庫性能智能

石 磊, 李 天, 高宇飛, 衛 琳, 李翠霞, 陶永才

(1.鄭州大學 網絡空間安全學院,河南 鄭州 450002;2.鄭州大學 計算機與人工智能學院,河南 鄭州 450001;3.嵩山實驗室,河南 鄭州 450046)

數據庫是信息系統用于存儲、分析和管理數據的基礎設施,直接影響信息系統的可靠性。數據庫中有上百項可調整的參數,控制著各組件的表現,如openGauss的參數max_process_memory控制數據庫節點上的最大可用內存,通過調整該參數可為各類緩存分配更大內存,減少磁盤讀寫次數,同時避免操作系統內存溢出(out of memory,OOM)。

數據庫參數優化面臨以下挑戰。

(1)參數空間大。假設有n個參數,每個參數有k種取值,則可選擇的配置有kn個,若參數取值范圍為一個連續區間,則配置數目無窮。因此,在高維參數空間內尋找最優配置是NP-Hard問題[1]。

(2)訓練樣本少。為確定一組配置對應的數據庫表現,需要在數據庫上運行較長時間的壓力測試,以獲取吞吐量等性能指標的變化。但是,為保障數據庫的穩定性,調優時間有限,因此獲取訓練樣本的時間短、數量少。

(3)環境變化多。數據庫的性能與軟硬件環境和工作負載等因素密切相關,在生產環境中,這些因素隨時可能發生變化,導致之前的最優配置失效,需要針對新的環境重新優化。

參數優化方法通過自動選擇合適的配置來快速提升數據庫的性能,現有數據庫參數優化方法可分為專家決策、啟發式算法、傳統機器學習方法和深度強化學習方法。專家決策基于人工經驗調整數據庫,是早期數據庫參數優化的主要手段;啟發式算法將參數空間離散化,通過抽樣來搜索最優解,難以在多項式時間內搜索到合適的配置;傳統機器學習算法基于訓練樣本找到數據庫狀態和參數之間的映射關系,效率較高,但是需要大量高質量的訓練樣本;深度強化學習結合神經網絡和強化學習的優勢,在高維參數空間中以試錯的方式進行探索,減少了對訓練樣本的依賴性。

傳統參數優化方法依賴于人工調整或啟發式算法,隨著數據庫實例越來越多,場景越來越復雜,傳統的參數優化方法難以取得理想的結果。隨機森林、支持向量機和決策樹等方法能夠通過歷史數據積累“經驗”,提升解決問題的能力。但是傳統機器學習模型難以解決像數據庫參數優化這樣具有高維連續空間的優化問題。隨著算力的發展,深度學習和強化學習[2-3](reinforcement learning,RL)為此類問題帶來更好的解決方案。深度學習利用神經網絡的學習能力,通過調整神經元之間的連接來模擬數據的映射關系,適用于傳統方法難以解決的問題或存在大量訓練樣本的場景。數據庫有著復雜的參數和大量的數據,為深入學習解決數據庫參數優化問題提供了很好的先驗條件。強化學習旨在訓練一個智能體與環境交互,智能體觀測環境后根據策略生成配置,然后根據環境的反饋來調整策略,以提升配置的質量。強化學習以“試錯”的方式進行學習,因此不需要預先準備大量的樣本,深度強化學習結合了深度學習和強化學習的優點,在工業界復雜的場景下有更好的表現。

本文首先對數據庫參數優化問題進行定義,并對相關方法進行分類;其次,分析現有數據庫參數優化方法的關鍵特征;最后,結合現階段存在的問題,對該領域未來的研究方向進行展望。

1 數據庫參數優化方法

為避免混淆,使用“配置參數”表示所有可配置的參數構成的集合;“配置”表示配置參數的一組完整取值;“參數”表示配置參數集合中的某個參數;“參數值”表示參數的具體取值。

1.1 數據庫參數優化問題定義

數據庫通常涉及上百項可調節的參數,運行環境和性能指標也較復雜。對數據庫參數優化的定義如下。

(1)配置。假設數據庫系統中共有n個可調整的參數,記為

x=。

(1)

式中:xi為第i個參數的取值;x為一個配置,包含了所有可能的參數值的組合,每個配置表示n維參數空間的一個點。

(2)運行環境。數據庫的表現不僅受參數影響,同時也和工作負載和硬件配置等運行環境密切相關。將運行環境集合記為E,每一種獨特的環境記為e, 其中e?E。

(3)系統性能。性能指標有吞吐量、響應時間等,設P表示數據庫的整體性能,P的計算方式通常不唯一。P受配置x和環境e的影響,P與x的映射關系定義為

P=f(x,e)。

(2)

式中:f(x,e)為數據庫系統在環境e下,部署配置x的性能,參數優化的方向即為最大化函數f(x,e)。

(4)約束條件。約束條件指變量xi必須滿足某些條件,如數據庫中每個參數的值都必須在規定的取值范圍內。此外參數優化消耗的時間、資源等也構成了約束條件的一部分。

數據庫參數優化問題可定義為

maxf(x,e);

(3)

s.t.gi(x)≤0,i=1,2,…,p;

(4)

hi(x)=0,i=1,2,…,q。

(5)

式中:x為數據庫配置;e為環境;求解目標為最大化f(x,e),gi(x)≤0和hj(x)=0為求解目標函數需要滿足的第i或j個約束條件。參數優化問題可概括為在滿足約束條件的同時,為數據庫尋找合適的配置,使得數據庫在特定環境達到最優的性能。

1.2 數據庫參數優化方法介紹

多年來,學者通過各種方式嘗試解決這一問題[4-11],參數優化方法分類如表1所示。

表1 數據庫參數優化方法比較Table 1 Comparison of database tuning methods

1.2.1 專家決策

對數據庫參數的調整依賴于數據庫管理員(database administrator,DBA),管理員通過手工多次實驗得到統計結果,再根據經驗調整數據庫參數。但是數據庫參數較多,多個參數組成的高維參數空間較大,通過手工抽樣的方式難以獲得最優解。此外,手工測試每個樣本的質量費時費力,調優結果難以適應變化的生產環境,因此,有學者嘗試使用經典算法來解決該問題。

1.2.2 基于規則的參數優化方法

為提高調優效率,DBA使用工具來輔助決策,使用某種方法,分析出模糊或確切的規則,然后輔助DBA調整數據庫參數。如 PostgreSQLTune能夠收集并分析數據庫的狀態(如當前緩存命中率等),分析出影響數據庫性能的關鍵參數,根據分析的結果和固定的規則來推薦用戶修改某些參數。Trummer[12]提出了一種自動從文本中提取出規則的工具 DB-BERT。DB-BERT使用預先訓練好的自然語言處理模型BERT[13]從數據庫手冊中識別出和參數相關的文本,將文本轉換成規則,根據規則推薦數據庫配置。這類工具雖然能夠減輕DBA的負擔,但其核心是基于規則來調整參數,應對的場景有限,面對復雜的數據庫環境和硬件,難以保持良好的表現。MySQLTuner[14]是一款基于規則調整MySQL配置的工具,可在不停機的情況下實時獲取數據庫的狀態,給出調整參數的建議。Xu等[15]針對如何選擇系統性能優化最相關的參數開展研究,結果表明,大量的數據庫參數沒有調整的價值,因此有必要進行參數篩選;簡化枚舉類型的參數可有效降低計算量,且對調優結果的影響幾乎可以忽略。

1.2.3 基于啟發式算法的參數優化方法

啟發式算法調整參數的主要思路是“搜索”,例如Zhu等[16]提出了一個基于搜索的參數優化系統 BestConfig。BestConfig 使用網格抽樣(grid sampling)的方式將連續的參數取值范圍離散化:參數取值范圍被劃分為k段,然后在每段上隨機取1個值,這樣n個參數可以組合出的配置為kn個。為減少搜索時間,BestConfig并不測試每一個配置,而是使用有界遞歸搜索算法隨機地選取k個樣本進行測試,然后以表現好的樣本為中心,重新開始搜索,如此迭代可在有限的資源下找到表現較好的配置。

此外,還有針對特定類型和版本的數據庫調優指南,例如Oracle數據庫調優指南[17]、DB2數據庫調優手冊[18]、Azure SQL數據庫的性能優化指南[19]。以上方法主要依賴于固定的參數優化規則或使用搜索算法找到合適的配置,在效率上高于DBA,但無法完全解決參數優化這類NP-Hard 問題,也不能在歷史經驗的基礎上更新模型,每次調優都要重新開始,模型的優化能力有限。

1.2.4 基于機器學習的參數優化方法

不同于啟發式算法,機器學習方法可以從訓練樣本中學習輸入與輸出之間的關系,因此能夠對輸出給出更為準確的預測?,F有的研究成果中,主要使用了傳統機器學習和深度強化學習兩種方法。

2 基于傳統機器學習的參數優化方法

2.1 方法概述

傳統機器學習方法包括決策樹、線性回歸和神經網絡等多種經典模型,利用訓練數據進行回歸分析和模式識別等,一般包括以下幾個步驟。

步驟1 性能采樣。數據庫的主要性能指標為吞吐量和延遲,使用采樣算法或隨機采樣,得到若干配置,通過實驗或者仿真等方式對配置進行評估,記錄下每種配置部署到數據庫后對數據庫帶來的提升,得到訓練樣本。

步驟2 構建性能預測模型。如圖1所示,基于步驟1得到的訓練樣本,利用機器學習方法,如回歸模型等,預測數據庫與某一配置下的性能之間的隱含關系。

步驟3 尋找最優配置。利用遺傳算法和梯度上升等方法,嘗試不同的配置,找到使系統性能達到最優的配置。

基于傳統機器學習的參數優化方法如表2所示。

2.2 經典模型

目前較常用的方法是根據專家的經驗篩選出對數據庫性能影響最大的參數,同時也有一些研究人員使用機器學習技術對相關性較強的參數進行排序,例如Lasso和方差分析。Lima等[27]使用遞歸特征消除(recursive feature elimination,RFE)和其他有監督學習方法評估配置的表現,迭代地減少相關性較弱的參數。算法分為3步:①根據預測的性能指標來給配置的表現打分;②利用線性回歸和決策樹等方法對參數排序;③基于隨機森林、梯度提升機(gradient boosting machine,GBM)和決策樹構建性能預測模型。實驗結果表明,在準確性上,使用參數子集訓練的模型優于使用整個參數集訓練的模型,說明了選擇參數的重要性。

表2 基于傳統機器學習的數據庫參數優化方法Table 2 Traditional machine learning-based database tuning methods

iTuned[20]是一款基于機器學習的自動數據庫參數優化系統,其優化過程主要分為兩步。首先,使用拉丁超立方體采樣(Latin hypercube sampling,LHS)選擇初始樣本。然后,利用這些樣本構建基于高斯過程[28](Gauss processes,GP)的性能曲面,并基于觀測結果改進函數,在參數空間中繼續選擇采樣點并在采樣點上再次進行實驗,得到對應的性能值后,更新性能曲面,重復這個過程,直到達到最優配置。在這個過程中,基于高斯過程的性能曲面逐漸逼近實際性能曲面,因此可以更快地找到最佳配置。但預測實際的性能曲面計算量較大,預測不夠精確,盡管iTuned使用參數選擇和工作負載壓縮等方法提升調優速度,但在性能曲面上尋找最優解仍需要消耗大量時間,例如在MySQL數據庫上選擇7個參數進行調優,每次可消耗3.2~7.0 h,這使得iTuned難以應用在生產環境。

OtterTune[21]使用了與iTuned類似的策略,創新之處在于實驗過程中使用之前學習到的知識來指導參數采樣,通過利用歷史數據,OtterTune可以更快地找到全局最優解,實現更好的性能優化效果。OtterTune優化參數的過程主要分為以下3步。

(1)特征抽取。從原始數據中選擇與之相關的一部分特征,使用部分特征來代替原始數據參與計算。OtterTune根據數據庫工作負載(workload)的特征來調整參數,不同的工作負載對參數的敏感性不同,因此,提取工作負載的特征并找到工作負載與參數的關聯非常重要。工作負載的特征包含兩方面:一方面是工作負載本身的特征,如負載中包含的查詢語句的類型、關聯的視圖、存儲過程和索引等;另一方面是數據庫在執行負載時的內部狀態,如內存使用率和緩存命中率等。

(2)降維。OtterTune使用因子分析(factor analysis,FA)對上一步中抽取出的特征進行篩選以去除無關特征,使用機器學習方法k-means 選擇與參數相關的特征,篩選后的特征將作為模型輸入的一部分。為進一步減少機器學習算法的搜索空間,OtterTune利用Lasso算法來選取與數據庫性能相關性最強的參數,并將參數按照重要性排序。

(3)搜索。OtterTune根據特征將當前的工作負載W映射到一個相似的負載W′,W′是在以前的參數優化任務中出現過的負載,所以針對W′調優的經驗可以復用,從而提升模型的效率。但由于W和W′并非完全相同,所以在調優時,系統綜合考量W和W′。

與iTuned 類似,OtterTune使用高斯過程估計出一個函數f(x),x為配置,f(x)代表將x部署在數據庫上執行負載W的性能。在f(x)上進行梯度下降(gradient descent)可找到局部最優的點。整個梯度下降的過程需要 10~20 s,每次調整參數的結果都將被保存起來,以便后續利用歷史經驗,結果明顯優于啟發式方法。然而,在高斯過程中,需要估計每個數據點的均值和協方差,從而得到整個函數的概率分布。這需要求解一個n×n的協方差矩陣K,其中n為數據點的數量,Ki,j=k(xi,xj)表示數據點xi和xj的協方差,整個高斯過程的訓練時間復雜度為O(n3),因此難以處理高維或大規模的數據。

Gunasekaran等[29]對OtterTune進行了改進,使用高斯混合模型(Gaussian mixture models,GMM)來修剪指標,并將集成模型(如隨機森林)與非線性模型(如神經網絡)結合起來進行建模。其中的一個關鍵步驟是利用歷史調優數據來訓練機器學習模型以提高預測的性能。此外,使用GMM聚類替代k-means聚類進行指標修剪,通過將每個簇視為不同的高斯分布,并考慮簇的均值和方差來克服k-means聚類的缺點。通過使用輪廓系數和貝葉斯信息準則(Bayesian information criterion,BIC)來確定GMM的最佳簇數。Gunasekaran等[29]建議進一步研究GMM聚類作為k-means聚類的代替,并收集更多數據以深入探索不同方法。實驗結果表明,基于GPR(Gaussian process regression)的基準模型表現最好,平均百分比誤差MAPE達到69%。

沈忱等[30]基于OtterTune提出了一種改進的方法D-OtterTune。D-OtterTune利用動態負載匹配方法解決OtterTune等模型中對靜態負載描述不夠準確的問題,基于動態時間規整算法將數據對齊來解決負載匹配中序列不規則的問題。

iBTune[22]專注于對數據庫緩沖池(buffer pool)進行優化,通過對緩存模型進行偏差分析(deviation analysis),在確保緩存命中率和響應時間的同時降低內存占用。Rafiki[23]是一種針對靜態工作負載的自動調優工具,當工作負載發生變化時,需要重啟調優過程并重啟數據庫,會對數據庫的可用性和穩定性造成較大影響。LlamaTune[24]利用領域知識(domain knowledge)提升調優過程中的采樣效率,利用隨機投影對參數空間降維,并對參數的取值范圍離散化,以進一步降低計算量。CGPTuner[25]綜合考慮操作系統和物理硬件等因素,基于上下文高斯過程(contextual Gaussian process)進行優化。OPTIMUSCLOUD[26]通過分析虛擬機參數和數據庫之間的依賴關系,基于隨機森林預測給定軟硬件環境下配置的表現。根據工作負載的變化情況決定何時更新配置,然后通過評估不同配置的適用性來確定更新哪些數據庫實例。Ishihara等[31]提出的調優模型采用高斯過程來搜索較優的數據庫配置,能夠應用于多種軟件系統。Siegmund等[32]綜合利用抽樣啟發方法和機器學習方法為系統生成性能影響模型。Nair等[33]提出了一種基于排序的性能預測模型,以降低構建性能模型的成本。

2.3 神經網絡模型

深度神經網絡可以通過多層神經元進行高維特征提取,對高維數據具有較好的處理能力,同時神經網絡可以通過并行計算和GPU加速等方式高效處理大規模數據。Zheng等[4]提出了一種基于神經網絡的調優方法。從自動工作負載存儲庫(automatic workload repository,AWR)收集數據,包括系統的統計信息、會話日志和查詢語句的執行記錄,然后構建神經網絡模型以獲取數據庫參數和性能指標(如吞吐量)之間的關系,最后采用調優算法優化這些關鍵參數。Rodd等[34]也提出了一種基于神經網絡的調優方法,通過收集數據庫的關鍵性能指標為數據庫的緩存推薦合適的值。Taft等[35]針對OLTP類型的工作負載構建負載預測模型,在負載增加之前對計算資源進行預測性分配,結果優于被動式調優系統。ACTGAN[36]是基于生成式對抗網絡(generative adversarial network,GAN)的軟件系統優化模型,也可用于數據庫參數優化。ACTGAN利用隨機抽樣得到初始樣本,從中選取表現較好的配置來訓練GAN網絡,不同于“搜索”的策略,ACTGAN使用生成的方式直接推薦配置,這與強化學習的思路較為相似。Ha等[37]結合深度前饋神經網絡(deep feedforward neural network,DFNN)和L1正則化的系統性能預測方法,提出了一種可以對系統性能進行預測的模型DeepPerf。該工作研究對象為軟件系統,同時也適用于數據庫管理系統。

Fang等[38]提出了一種基于機器學習的查詢級分布式數據庫調優模型。首先,利用查詢向量嵌入網絡(query vector embedding network,QVEN)壓縮原始輸入,生成表示查詢特征的向量。QVEN的訓練目標是使輸出盡可能接近實際查詢特征向量的壓縮表示,可用于查詢語句向量化。對輸入的查詢語句和對應的執行計劃進行解析和降維生成表示查詢特征的壓縮查詢向量。在此基礎上,利用查詢性能預測網絡(query performance predict network,QPPN)來預測查詢的執行時間。QPPN模型由3層神經網絡組成,包括線性層、BatchNorm層和ReLU激活函數。在訓練模型之前,輸入的查詢向量和配置向量會進行歸一化處理,該模型的訓練數據是由查詢向量、配置向量和延遲時間組成的集合。通過運行工作負載并獲取查詢語句的執行計劃,可以生成訓練數據。在CockroachDB上的實驗結果表明,該系統在典型的OLAP工作負載下實現了更高的性能,平均降低9.2%的延遲,并且對于某些查詢類型,延遲降低超過60%。

3 基于深度強化學習的參數優化方法

傳統機器學習方法利用過去的調優數據能夠加速調參任務,但仍然存在一些局限性。首先,傳統機器學習方法依賴大規模高質量的訓練樣本;其次,傳統機器學習方法通常采用鏈式結構,在每個階段獲得的最優解并不能保證在下一階段仍然是最優解;最后,數據庫系統具有高維連續的參數空間,傳統的機器學習模型擬合出的性能曲面不夠精確,而且難以在多項式時間內尋找該曲面上的最優解。針對上述問題,一些研究人員開始嘗試使用強化學習來解決數據庫參數優化問題。

3.1 方法概述

強化學習不像傳統機器學習那樣需要大量帶標注的樣本,相反,智能體(agent)在與數據庫交互的過程中,通過試錯來學習如何生成高質量配置。強化學習的核心是利用智能體與環境(environment)進行交互,并通過在環境中執行一系列動作來學習如何最大化獎勵(reward)。DQN[39]等方法可用于處理離散動作,而數據庫中大部分參數的取值范圍為一個連續區間,多個參數值構成的配置有無窮多個。Mnih等[40]將深度神經網絡與強化學習結合,提出了一種深度強化學習(deep reinforcement learning,DRL)模型,利用深度神經網絡來處理強化學習中具有連續取值空間的參數。

將DRL應用到參數優化問題的最大挑戰之一是基于強化學習模型對參數優化問題建模。強化學習的數學基礎是馬爾科夫決策過程(Markov decision process,MDP),如圖2所示,在一個MDP中,智能體在觀測環境的狀態后,選擇一個動作并執行,執行動作后,智能體根據執行結果獲得一次獎勵,隨后,環境的狀態可能發生變化,智能體再次觀測環境狀態和選擇動作,這個過程不斷重復,直至達到終止條件。智能體的目標是選擇一個最優的策略,使得回報(累計獎勵)最大化。

圖2 強化學習流程Figure 2 Process of reinforcement learning

圖2中si為第i步環境的狀態,ai為第i步智能體的動作,ri為第i步智能體獲得的獎勵。強化學習與參數優化問題的映射如表3所示。

表3 強化學習與參數優化問題的映射Table 3 Mapping from RL to database tuning problem

(1)智能體。智能體是做出決策的主體,智能體可以基于多種模型構建。

(2)環境。數據庫被視為一個環境,智能體在與環境的交互中學習。

(3)動作。動作是智能體基于當前狀態做出的決策。在參數優化問題中,動作是生成配置。

(4)動作空間。指所有可能動作的集合。在參數優化問題中,指所有可選擇的數據庫配置的集合。

(5)獎勵。獎勵是環境對于智能體動作的反饋,智能體生成的配置對數據庫帶來的提升越大,獎勵越大,反之亦然。獎勵的計算方式由獎勵函數(reward function)定義。

(6)狀態。對當前時刻數據庫運行狀態的概括,如當前死鎖數量(lock_deads)和當前打開文件數量(file_num_open_files)等。

其中,智能體是整個參數優化模型的核心,智能體的構建和訓練直接影響模型的表現。

3.2 智能體的構建

智能體的形式并不唯一,通常需要根據強化學習的目標和環境的特點來設計。由于智能體需要在連續高維的參數空間中探索合適的配置,所以需要使用能夠處理連續動作空間的算法來構建智能體。以soft actor-cricit[41]為例,智能體的結構如圖3所示。其主要包含actor和critic兩個神經網絡,通過更新actor和critic網絡的參數來學習生成高質量配置。

圖3 智能體架構圖Figure 3 Architecture of agent

給定任意隨機變量x,假設x的概率密度為P(x),則x的熵的定義如下:

(6)

熵反映了一個系統的混亂程度,在參數優化中,該項表示智能體輸出配置的多樣化程度,該項可引導智能體盡可能地輸出多樣的配置,從而增加智能體在參數空間的探索能力。

智能體學習的過程是最大化目標函數的過程,目標函數不唯一,其中一種定義如下:

(7)

式中:π為智能體的策略;Vπ(s)為在狀態s下策略π表現的好壞程度;R(st,at)為獎勵函數,表示智能體在環境的狀態為st下做出動作at能夠獲得的獎勵;α為系數;H(π(·|st))為智能體輸出的動作的熵。

智能體對應的動作價值函數(action-value function)定義為

(8)

動作價值函數代表在策略π和狀態st下采取動作at可獲得的回報的期望?;貓?累計獎勵)為多次獎勵的加權和,根據式(7)和式(8),Vπ(s)可改寫為

(9)

智能體中actor的輸入是狀態s,輸出為數據庫配置;critic的輸入為狀態s、配置和獎勵,輸出為1個累計獎勵的期望。智能體使用梯度上升更新actor和critic網絡的權重來最大化目標函數。訓練智能體的流程如下。

步驟1 使用隨機參數初始化actor 和 critic 網絡。

步驟2 在t時刻,智能體觀測環境狀態st并由actor選擇動作,即生成數據庫配置。

步驟3 從環境獲得獎勵rt和新的狀態st+1。

步驟4 critic為actor輸出的配置生成1個打分,打分代表智能體未來可獲得的回報。打分越高,表示actor 輸出的配置的質量越好。

步驟5 critic根據rt和式(8)更新網絡參數,以獲得更精確的打分。

步驟6 actor使用梯度上升最大化式(7),獲得更高的打分。

步驟1至步驟6重復進行,直到智能體收斂或達到終止條件。以上步驟與實際情況略有出入,在實際中,還會使用經驗回放和自動調整熵正則項優化等技術來提升智能體的穩定性和效率。

3.3 相關工作

深度強化學習相關參數優化系統如表4所示。

表4 深度強化學習相關參數優化系統Table 4 Database tuning system with reinforcement learning

深度強化學習方法在吞吐量和延遲兩方面表現更出色,強化學習能將吞吐量提升到8倍,而大部分傳統機器學習方法僅能提升不到1倍。然而,由于智能體和數據庫之間頻繁交互,深度強化學習方法的運行時間更長。例如,CDBTune+[11]運行時間長達50 h,Hunter[43]采用分布式訓練可將運行時間縮短至3 h,傳統機器學習方法則只需要1 h左右。

3.3.1 CDBTune

CDBTune首次將深度強化學習應用到數據庫參數優化問題上,基于深度確定性策略梯度算法(deep deterministic policy gradient,DDPG)[45-46]構建智能體。CDBTune優化的指標為數據庫的吞吐量和延遲,在t時刻,配置對兩個指標的提升的定義如下:

(10)

(11)

式中:Tt為t時刻的吞吐量;T0為數據庫初始狀態的吞吐量;ΔTt→0和ΔTt→t-1分別為t時刻與初始狀態和上一狀態相比較對吞吐量的影響;ΔT為t時刻配置對吞吐量的總體影響;ΔL為t時刻配置對延遲的總體影響?;谑?10)和式(11),獎勵函數定義如下:

(12)

獎勵函數引導著智能體生成能夠提升吞吐量和降低延遲的配置,若配置未能給數據庫帶來提升,則獎勵函數返回0或負值。相較于傳統機器學習方法,CDBTune有以下優勢。

(1)在獎勵函數的引導下,智能體以試錯的方式尋找最優配置,僅需少量樣本即可實現較好的結果。

(2)在高維連續空間中表現優于OtterTune等基于傳統回歸方法的模型。

(3)利用端到端的方法減少出錯概率,避免陷入局部最優。

CDBTune的調優粒度較粗,僅能對3種工作負載調優:只讀(read-only)型工作負載、只寫(write-only)型工作負載、讀寫混合(read-write)型工作負載,無法對特定的工作負載優化。

3.3.2 Qtune

Qtune同樣基于DDPG構建智能體,但是Qtune可提供不同粒度的優化方案。Qtune從SQL語句中提取特征,如查詢類型、查詢代價和查詢關聯的數據庫表等,將這些特征提供給深度強化學習模型,以動態選擇合適的參數配置。Qtune的調優粒度從高到低分別為查詢級調優、負載級調優、簇級調優。查詢級調優針對單個查詢生成合適的配置。這種方法延遲較低 ,但不能并行運行SQL語句,導致吞吐量較低。工作負載級調優面向工作負載推薦配置,吞吐量較高,但不能針對SQL語句推薦配置,因此具有高延遲。簇級調優兼顧了高吞吐量和低延遲,將SQL語句分為若干個組,以組為單位進行調優。Qtune提出了一種基于深度學習的查詢聚類方法,能夠根據SQL語句的特征進行聚類。這種方法可以實現高吞吐量和低時延。用戶可根據需求權衡吞吐量和延遲,選擇不同的調優粒度。

3.3.3 Hunter

Qtune和CDBTune能有效地生成高質量數據庫配置,但是在訓練智能體過程中,每回合都需要利用吞吐量和延遲計算獎勵值,為獲取準確的吞吐量和延遲,每次需要對數據庫進行至少 1 min的壓力測試,這消耗了大量的時間。為解決該問題,Hunter同樣以DRL為核心,利用主成分分析 (principal component analysis,PCA)和隨機森林(random forest,RF)減少 DRL 模型的搜索空間,提升搜索效率,利用遺傳算法為DRL模型生成訓練樣本,提升模型訓練速度。為了進一步加速模型的訓練,Hunter克隆多個數據庫實例并行訓練,使用10個克隆的數據庫實例可將訓練速度提升約3倍。

3.3.4 ResTune

ResTune使用元學習(meta-learning)從歷史調優中抽取經驗,加速帶約束的貝葉斯優化問題,保證性能滿足用戶需求的同時,盡可能減少資源消耗。

DRL融合MDP和梯度上升調整數據庫參數,降低了對樣本的需求,然而,智能體的動作具有一定的不確定性,尤其在初始階段,智能體的策略近似于隨機,因此可能生成危險的配置,進而導致數據庫性能大幅下降甚至停機。此外,模型的表現受軟硬件環境的影響。因此需要權衡多個因素,才能使總體效果達到最優。

4 趨勢與展望

(1)參數優化的細粒度。已有的工作大多是針對數據庫的吞吐量和延遲進行優化,這些指標可根據業務類型進一步進行細分,如寫吞吐量,讀吞吐量、寫延遲、讀延遲和緩存大小等。優化的對象也可以是單條查詢、單個類型查詢或某一用戶的行為習慣。根據場景的變化,動態調整參數優化的細粒度能夠使模型有更好的適應性[47]。

(2)基于變化環境的數據庫參數優化。數據庫在不同軟硬件環境下表現有一定的差異,如何在環境發生變化時能夠用已有的經驗快速生成針對新環境的優化結果,是一個重要的問題。遷移學習通過利用源域中學到的知識和經驗來改善目標域中的學習性能,減少標注數據的需求,提升模型的泛化能力,并幫助解決樣本不平衡問題。Jamshidi等[48]利用遷移學習將部分歷史經驗從源域遷移至目標域以適應新的環境。然而,如何在環境劇烈變化時仍能充分利用已有系統的知識,是未來重要的研究方向。

(3)自運維的數據庫。已有的數據庫參數優化系統由人工設置優化指標和各種超參數,然后在接收到優化請求后,啟動優化流程[49]。Pavlo等[50]認為自運維的數據庫應該滿足:①自動選擇進行何時進行何種操作以改進某項指標;②從歷史經驗中自動學習,并在沒有人工干預的情況下根據歷史經驗做出決策。目前幾乎沒有能完全解決這類問題的工作。除了數據庫參數調優外,未來的數據庫也將朝著自主監控、自主診斷、自主修復等方向發展[51-56]。

5 結束語

數據庫系統是一個由存儲介質、處理對象和管理系統集合體構成的復雜系統,數據庫自身的復雜性和外部環境的多樣性為參數優化帶來了多種挑戰。相較于經典機器學習模型,神經網絡能夠更好地處理復雜數據,但是對訓練樣本的依賴性限制了其泛化能力。而強化學習基于馬爾科夫決策過程,以試錯的方式在連續高維空間內搜索最優解,減少了對訓練數據的依賴。以強化學習為核心,并結合多種方法的數據庫參數優化模型取得了較好的結果。此外,如何在自運維等場景下進行參數優化,已成為當前研究熱點和難點。

猜你喜歡
數據庫性能智能
提供將近80 Gbps的帶寬性能 DisplayPort 2.0正式發布
智能前沿
智能前沿
智能前沿
智能前沿
數據庫
數據庫
數據庫
數據庫
Al-Se雙元置換的基于LGPS的thio-LISICON的制備與性能表征
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合