曹 蓉 鮑 亮 崔江濤 李 輝 周 恒
1(西安電子科技大學計算機科學與技術學院 西安 710071)
2(浪潮集團有限公司 濟南 250014)
萬維網、電子商務、物聯網和其他應用的持續發展產生了大量且不斷增長的原始數據,因此需要一類軟件系統來處理海量的原始數據,并通過分析數據從中提取有用信息.為了滿足數據處理的需要,數據庫系統應運而生,它不僅是存儲介質、處理對象和管理系統的集合體,也是一個為應用系統提供數據的軟件系統,是數據基礎設施中必不可少的關鍵組成部分.在這種背景下,實現良好且健壯的數據庫系統性能是高效執行數據存儲、分析和管理的基礎.然而,數據庫系統性能與大量的配置參數直接相關,這些參數控制著系統運行時操作的各個方面,并極大地影響了數據庫的性能[1].數據庫的配置參數主要分為3 類:1)資源類;2)策略類;3)位置類[2].資源類參數指定系統為某項任務分配多少資源,包括固定組件(例如垃圾收集線程數)和動態活動(例如每個查詢的內存使用量).策略類參數決定數據庫系統如何處理特定任務.例如,通過設置特定參數可以控制數據庫系統在事務提交時是否將預寫日志刷新到磁盤.最后,位置類參數指定數據庫系統在哪里找到需要的資源(例如文件路徑),以及如何與外部進行交互(例如網絡端口號).其中,資源類和策略類參數對數據庫系統的性能影響較大,數據庫性能優化應重點考慮這些參數在特定環境下的調優.
數據庫參數優化是一項維持或提升數據庫性能的重要工作.通過調整數據庫系統配置參數實現性能優化的一類技術統稱為數據庫參數優化技術.參數優化產生的性能優勢在業界是眾所周知的,合適的參數配置可以實現數據庫數量級的性能提升[3],而不合適的參數配置則會導致其系統性能大幅度降低[4].然而,由于數據庫的性能受到多個參數共同影響,再加上可調參數數量、數據庫體量和業務量的劇增,導致傳統基于人力的參數優化越來越困難.另一種直觀的方式則是通過測量數據庫系統所有參數配置的性能,來確定最佳的參數配置.但由于高維配置空間的復雜性,這種方法通常是不可行的.例如,若對1個僅具有5 個可調參數的系統進行所有實驗,假設每個參數有6 種不同的取值,且每個實驗的平均運行時間為10 min,則進行所有實驗需要60 d,這通常是不可接受的[5].因此,數據庫自動參數優化技術是解決這一難題的主要選擇之一,是一種很有前景且具有挑戰性的系統性能優化方法.具體來說,數據庫系統參數優化有3 個主要的挑戰:
1)復雜性.數據庫系統通常存在數百個可調的參數[2],參數具有連續型、離散型和枚舉型等多種類型和不同的取值范圍,而且參數之間存在復雜的隱性依賴關系.例如,某些參數可能會以不同的方式影響查詢性能,而某些參數組合可能會產生不同的效果.有研究工作表明在復雜的參數空間中找到最優的系統參數配置是一個NP-hard 問題[6].
2)樣本不足.數據庫參數優化通常需要大量數據樣本來獲得良好的結果,而收集這些數據是昂貴和耗時的.為了不干擾生產系統的運行,數據庫管理員(database administrator,DBA)首先需要部署1 個數據庫副本,并獲取1 個具有代表性的工作負載示例,調優工具將在單獨的測試系統上運行該工作負載的實驗.根據工作負載示例運行時間的不同,收集足夠的數據樣本可能需要幾天甚至幾周的時間,而實際的調優過程往往有嚴格的時間限制,這將導致樣本不足的問題.
3)動態變化性.隨著數據庫系統的規模不斷增大,復雜性增加,繁復多變的工作負載以及靈活的云基礎設施使數據庫系統的參數優化變得更具挑戰性.當環境發生變化時(包括工作負載變化、硬件配置變化和軟件版本變更),現有的最優參數配置將不再適用.在這種情況下,如何利用現有的優化知識,對新環境快速地進行參數優化也是亟待解決的問題.
目前,大量研究工作通過在數據庫系統中引入自配置特性來解決性能優化問題.值得一提的是,軟件系統參數優化領域也存在大量的研究成果.數據庫管理系統是軟件系統的一個類別.因此,一部分軟件系統參數優化的工作也適用于數據庫管理系統,在實驗部分也會選取部分數據庫管理系統對方案有效性進行驗證.這部分工作通常滿足2 個條件:1)參數優化工作視系統性能模型為黑盒模型,無需對系統內部進行深入理解與分析;2)參數優化工作能夠處理連續型、離散型和枚舉型等多種類型的配置參數,與數據庫系統的參數類型一致.在后續的文獻綜述中也會包含一部分滿足上述2 個條件且對數據庫系統進行實驗驗證的軟件系統參數優化工作,并在相應位置進行說明.
本文對現有的數據庫參數優化方法進行了全面的研究,總結出針對不同挑戰和場景提出的不同方法或策略.本文將這些方法按照問題場景的不同分為2 類:固定環境下的數據庫參數優化方法和變化環境下的數據庫參數優化方法.其中,針對固定環境下的數據庫參數優化方法的研究工作較多,按照方法的特點進一步分為傳統的數據庫參數優化方法(包括手工參數優化方法、基于規則的參數優化方法、基于模型的參數優化方法和基于搜索的參數優化方法)和基于機器學習的數據庫參數優化方法(包括基于傳統機器學習的參數優化方法和基于深度強化學習的參數優化方法).下面對各種方法進行簡要介紹.
1)手工參數優化方法是專家通過手工反復實驗得到的數據和經驗來確定最終參數配置的方案.
2)基于規則的參數優化方法能幫助用戶根據專家的經驗、在線教程或調優說明進行參數優化.
3)基于模型的參數優化方法通過深入了解系統內部建立有效的性能模型,建立模型需要大量專家知識,不需要或僅需要少量的性能樣本.
4)基于搜索的參數優化方法基于搜索算法和當前系統性能反饋的指導,在不同的參數配置下反復執行某一工作負載,從而找到最佳性能下的參數配置.
5)基于傳統機器學習的參數優化方法把數據庫系統視為黑盒,不需要對系統內部深入理解,通過性能樣本和機器學習方法構建性能預測模型.
6)基于深度強化學習的參數優化方法通過將數據庫參數優化場景映射到強化學習中,來尋找最優的參數配置,這種方式既不需要先驗知識,也無需對復雜的性能曲面進行擬合.
7)變化環境下的數據庫參數優化方法將遷移學習的概念引入數據庫系統的參數優化中,可以隨著環境的變化調整性能預測模型或推薦最優參數配置.
下文將對數據庫系統的各種參數優化方法進行深入分析和比較,并對每種方法的優缺點進行歸納總結.通過對數據庫系統中具有代表性的參數優化技術進行全面的回顧和分析,本文有益于啟發新的參數優化技術及其實際應用,并且可以作為選擇和比較現有參數優化方法的技術參考資料.具體來說,本文的主要貢獻有3 個方面:
1)對數據庫參數優化進行了問題定義,并提供了相關方法的一般分類.
2)對現有代表性參數優化方法的關鍵特性進行了詳細描述.
3)介紹了未來的研究問題與挑戰,并展示了參數優化是一個具有挑戰性的研究領域,其解決方案將廣泛應用于現實世界用例中.
通過對相關綜述工作進行搜索整理,目前已有一些研究數據庫系統查詢優化的綜述論文[7-9].查詢優化是一個較為成熟的研究領域,但關注點主要集中在優化查詢執行計劃,或索引和物化視圖的創建,忽略了配置參數的優化.本文關注的參數優化問題可以優化整個數據庫系統的性能,進而優化查詢性能.同時,也存在一些對自動參數優化方法進行研究的綜述文章[10-11],它們的研究對象是大數據處理系統和啟發式算法,而不是本文關注的數據庫系統.此外,機器學習技術在數據庫系統和數據管理技術中的應用也是目前的研究熱點之一[6,12-15],數據庫系統的參數優化問題是其中關心的問題之一,在這部分綜述中的相關討論還不夠詳細和深入.文獻[6,12-15]所述的工作著重綜述了固定環境下的數據庫參數優化方案,本文添加了對變化環境下數據庫參數優化和性能預測方案的討論.文獻[16]中也有對變化環境下數據庫參數優化方法的介紹,但主要集中于工作負載變化場景,即自適應參數優化方法.文獻[17]同樣關注于工作負載變化場景,并將工作負載感知的數據庫性能優化分為3 個方向:工作負載分類、工作負載預測和基于工作負載的調優.本文則對3 種不同類型的環境變化場景下的參數優化工作進行了分類介紹.此外,Van Aken 等人[18]也針對數據庫管理系統的參數優化問題進行了研究,但重點關注基于機器學習方法的自動參數調優服務在實際生產環境中進行應用的效果,并沒有對相關工作進行全面的總結分析.本文著眼于數據庫系統的參數優化問題,對相關工作進行歸納總結,并進行了詳細和深入的分析,從而幫助廣大研究人員充分了解當前數據庫參數優化技術的發展情況.
圖1 是數據庫系統參數優化問題的示意圖.給定待優化數據庫系統、系統的工作環境和優化過程中的資源約束,參數優化問題的目標是通過調節該系統的可配置參數來優化系統的性能指標.具體來說,該問題包含待優化數據庫系統、工作環境、優化約束、配置參數和系統性能5 個概念,下面分別進行定義.

Fig.1 Overview of parameter tuning problem for database systems圖1 數據庫系統參數優化問題示意圖
1)待優化數據庫系統(system under tune,S).待優化數據庫系統是需要進行參數優化的數據庫系統,通常具有大量的可配置參數.
2)工作環境(environment,E).數據庫系統部署和使用的不同方式被稱為工作環境.數據庫的工作環境主要包括3 個因素:1)工作負載(workload,W);2)硬件配置(hardware,H);3)軟件版本(version,V).上述3 個因素分別對應的是系統運行的輸入、系統的硬件配置和軟件的版本狀態.其中,工作負載是指數據庫系統需要完成的業務或查詢任務,例如,需要執行的事務集合、需要完成的查詢請求等.在參數優化問題中,優化人員通常無法事先了解工作負載的內部細節,僅可以通過實驗的方法測量數據庫系統在該工作負載下的性能,而不進一步考慮其內部結構.本文將一個工作環境形式化地表示為e=(w,h,v),w∈W,h∈H,v∈V,其中W,H,V分別表示所有可能的工作負載變化W、所有可能的硬件變化空間H,以及所有可能的軟件版本V.因此,環境空間可以定義為E=W×H×V,且e∈E.
3)配置參數(configuration,C).為了提高性能和靈活性,待優化數據庫系統通常會提供大量的參數,鼓勵使用者根據不同的工作環境進行個性化配置,以獲得最佳的系統性能體驗.本文將待優化數據庫系統S的所有可配置參數記為集合c={c1,c2,…,cn},其中ci表示某個具體的參數,n表示參數的總數量,c∈C.為了避免混淆,本文使用術語“配置參數”表示所有可配置的參數構成的集合,用“配置”表示配置參數的一組完整取值,用“參數”表示配置參數集合中某個具體的參數,用“參數值”表示該參數的具體取值.
4)系統性能(performance,P).數據庫的系統性能是用來度量待優化系統優化效果的指標,常見的性能指標包括響應時間、吞吐量、每秒處理的事務數量等.系統性能通常與系統需要完成的業務相關,由用戶與系統設計人員共同確定,并具有可測量、可量化、可比較等重要特征.本文將系統性能記做函數P(·),并用P(s,e,c)表示某個待優化數據庫系統s在工作環境e和配置參數c下的具體性能取值,s∈S.
5)優化約束(constraint,R).由于待優化數據庫系統通常會成為承載企業實際應用的系統,需要快速上線并長期運行,因此對參數優化過程有著較為嚴格的限制和約束,其中最常見的約束條件是優化時間.由于待優化系統在不同參數配置下運行時間可能差異較大,為了簡化并確定約束條件,本文將優化時間約束轉換為系統測試次數約束(記作T),即嚴格限制系統在不同參數配置下的性能測量次數,記做T≤N,N表示限制最大系統測試次數.
基于上述5 個定義,數據庫系統參數優化問題定義為:
其中式(1)表示優化問題的目標是通過在合法的配置參數空間中進行探索,找到在特定工作環境e下,能夠使得某個待優化目標系統s取得最優性能的配置c.式(2)表明該問題有著非常嚴格的約束條件,即能夠對待優化數據庫系統進行測試的次數T不能大于預先設定的上限值N.
在對研究問題進行形式化定義的基礎上,本文從問題層面出發,根據參數優化過程是否涉及環境變化,分別從2 個角度對數據庫參數優化技術進行了綜述:首先總結分析在固定工作環境下進行參數優化的方法;隨后,介紹變化環境下的數據庫參數優化方法;最后,對研究現狀進行總結,并指出未來的研究方向與挑戰.
近年來,隨著物聯網、云計算、大數據等技術的興起,對不同環境下快速進行數據庫系統自動參數優化的需求日益迫切,目前已經有很多相關研究成果.根據數據庫參數優化方法本身是否具有學習能力,本文可以將這些方法大體分成傳統的參數優化方法和基于機器學習的參數優化方法2 類.其中,傳統的參數優化方法可進一步細分為手工參數優化方法、基于規則的參數優化方法、基于模型的參數優化方法和基于搜索的參數優化方法;基于機器學習的參數優化方法可根據采用的機器學習技術進一步分為基于傳統機器學習的參數優化方法和基于深度強化學習的參數優化方法.
2.1.1 手工參數優化方法
傳統的手工參數優化方法完全依賴于DBA 的經驗.通過不斷地進行手工實驗獲取專家經驗,再根據這些專家經驗確定最終的參數配置.這種手工參數優化方法雖然能夠在一定程度上解決問題,但在有效性方面存在嚴重問題.一方面,數據庫的參數空間通常具有高維且復雜的特點,通過少量的手工實驗來獲取足夠的專家知識對DBA 是一項非常艱巨的任務;另一方面,DBA 需要根據應用程序的操作調整數據庫參數,然而這需要進行大量的實驗迭代.這種不斷試錯的方法是非常耗時的,因此DBA 往往需要數天甚至數周的時間來進行數據庫參數優化,這將造成大量的人力、資源成本開銷.
2.1.2 基于規則的參數優化方法
DBA 負責執行監控或維護數據庫環境相關的任務,典型的參數優化是以他們的專業知識和經驗為基礎的,根據規則和指南配置參數也是常用的輔助決策方法.這種方法通常是數據庫廠商針對某種數據庫進行設計的,通過獲取數據庫狀態、性能以及部分配置參數對數據庫性能的影響,為參數的設置提供建議.舉例來說,MySQLTuner[19]是一款用于分析MySQL 配置和性能的工具,通過在數據庫運行時獲取數據庫的狀態數據和當前的配置參數,并基于規則給出一些參數調整的基本建議.類似的針對特定版本和類型的數據庫參數優化指南還有Oracle 數據庫性能調優指南[20]、IBM 調優指南[21]、Azure SQL 數據庫的自動調優指南[22].此外,當數據庫成為主要的企業級瓶頸時,WebLogic[23]提供的調優指導能夠配置數據庫以獲得最佳性能,包括一些通用的數據庫調優建議和適用于Oracle,SQL Server,Sybase 數據庫的調優建議,其中給出了一些重要參數及其推薦值.
錯誤的參數配置是許多開源數據庫系統查詢失敗的主要原因之一.針對這一問題,SPEX[4]通過軟件源代碼推斷配置需求,并進一步揭露錯誤配置漏洞,診斷容易出錯的配置.SPEX 將不同類型的錯誤配置漏洞進行分類,并在此基礎上檢測和預防某些易出錯配置.具體來說,SPEX 引入配置約束來幫助定義配置需求,這種約束包含參數的數據類型和取值范圍,以及與其他參數的依賴關系或相關性.SPEX 通過這些約束可以自動分析參數配置是否合理,并幫助實現參數的正確配置.
Xu 等人[24]還研究了一個與參數相關的基本問題,即篩選出對于系統性能優化和可靠性任務而言最重要的參數.該研究針對這一問題提出了一些具體而有效的指導方針,能夠顯著降低參數配置空間.指導方針包括:1)理解實踐中使用的配置參數;2)降低過度設計帶來的配置復雜性.對于指導方針1,Xu 等人[24]認為:①許多參數既沒有必要也沒有價值;②簡化枚舉類型的參數可以簡化配置,且不會顯著降低系統靈活性;③過多的參數使尋找最優參數配置變得非常復雜;④大量用戶僅設置具有顯式外部影響的參數.對于指導方針2,Xu 等人[24]展示了可以在對用戶影響很小的情況下簡化參數配置.此外,還研究了關鍵字搜索、基于自然語言處理(NLP)的導引、谷歌搜索[25]等配置導引方法,并提供了配置導引相關的經驗法則.上述2 個指導方針均針對不同類別的軟件系統進行了深入分析,包括數據庫系統在內,例如MySQL 和PostgreSQL.
基于規則的參數優化方法能夠幫助用戶根據專家經驗、在線教程或參數優化說明對系統參數進行調優.這類方法通常不需要模型,適合快速引導系統,但是基于規則的方法也具有較多的局限性,例如通常面向特定的數據庫類型,甚至是特定的版本,應用的場景受限,同時也無法應對變化的數據庫環境,因此通常無法在復雜的配置空間中取得很好的優化效果.
2.1.3 基于模型的參數優化方法
基于模型的參數優化方法通?;趯ο到y組件的深入理解來建立性能模型,需要大量使用專家知識,不需要或僅需要少量的性能樣本.
在21 世紀初,IBM 發布了DB2 性能向導工具[26],該工具詢問DBA 關于應用程序的問題,例如工作負載是聯機事務處理(on-line transaction processing,OLTP)還是聯機分析處理(on-line analytical processing,OLAP)類型,然后根據DBA 的答案提供參數設置.該性能向導工具基于DB2 工程師手工創建的模型,因此可能無法精確地反映實際的工作負載或操作環境.IBM后來發布了帶有自調優內存管理器的DB2 版本,用來確定如何分配數據庫管理系統(database management systems,DBMS)的內存[27-28].
自調優內存管理器(self-tuning memory management,STMM)[27]通過運行時建模、成本效益分析和系統級資源分析,可以實現對數據庫內存分配的自動調優.具體來說,STMM 包含1 個內存控制器,在每個調優周期中評估不同組件的內存分布,并確定是否可以通過數據庫內存重新分配來提高系統性能.此外,調優周期的頻率會根據工作負載復雜性或資源可用性的變化而發生改變,從而實現自適應的性能調優.
Tian 等人[28]則研究了緩沖池大小的配置問題.DB2 將緩沖區域劃分為許多獨立的緩沖池,為每個緩沖池設置適當的大小對于實現最佳性能至關重要.Tian 等人[28]提出了2 種成本模型,分別基于頁面錯誤和數據訪問時間,并通過貪心算法來尋找最優解.最后,通過實驗驗證了文獻[28]所提方案的有效性,結果表明,基于數據訪問時間的成本模型在優化緩沖池大小方面比基于頁面錯誤的成本模型更有效.
Oracle 開發了類似的內部監控系統[29],用來識別DBMS 內部組件配置錯誤造成的性能瓶頸,并通過向DBA 提供可操作的建議來緩解性能瓶頸.自動數據庫診斷監視器(automatic database diagnostic monitor,ADDM)[29]通過自動化診斷性能問題,并提出適當的調優建議,從而最大限度地提高數據庫吞吐量.為了對比不同數據庫組件對性能的影響,ADDM 定義了一種新的度量方法——數據庫時間,為數據庫中任何資源或活動對性能的影響提供了一個通用的衡量標準.該度量方法可以用于識別需要實驗的數據庫組件,并量化數據庫性能的瓶頸.最后,ADDM 通過為數據庫組件構建有向無環圖來識別產生性能問題的根本原因.通過對各種可能的替代方案進行仿真來估計對數據庫的特定組件或功能的影響.例如,當研究內存參數設置的問題時,ADDM 將對不同緩沖區大小的運行時間進行仿真,并推薦合適的參數值.
與IBM 的工具一樣,Oracle 系統采用基于性能度量的啟發式方法來管理內存分配,因此無法對所有參數進行優化.Oracle 的后續版本包含SQL analyzer工具,可以評估DBMS 的不同變體對性能的影響,例如升級到某一新版本或更改系統的配置[30-31].微軟的SQL Server[32]也采用了這種方法.但是對于DBMS 來說,這些工具仍然需要DBA 的參與,如提供需要更改的參數設置,然后這些工具對該更改執行實驗.最終DBA 根據工具報告的結果進行決策.
Tran 等人[33]提出了一種基于buffer miss 的緩沖池調優方法.通過基于分析模型推導得出的公式擬合可用數據,然后利用公式指導調優.Sullivan 等人[34]通過影響圖來建模配置參數之間的概率相關性,用參數之間的條件獨立性來推斷特定DBMS 配置的預期結果.然而,這些影響圖必須由領域專家手動創建,因此該方法每次只能調優少量參數.DBSherlock[35]工具通過比較DBMS 性能時間序列數據中運行緩慢的區域和運行正常的區域來幫助DBA 診斷數據庫中的性能問題.與此同時,DBA 診斷的根本原因將被納入算法作為新的因果模型,從而改善未來的性能診斷.
Wei 等人[36]則提出一種基于模糊規則的數據庫參數優化方法.首先,根據數據庫的自動負載倉庫報表獲取數據庫系統的關鍵參數和性能指標.其次,通過識別參數和性能指標之間的關系來構造調優相關的模糊規則.最后,開發了一種基于模糊規則的自適應參數優化算法,可以通過調優多個參數提升性能,為DBA 推薦滿足性能需求的參數配置.
基于模型的參數優化方法在實際工程中得到大量應用,但仍然存在一些問題:1)構建的性能模型通用性較差,對于不同的數據庫類型或不同的應用場景都無法直接應用,需要重新構建;2)每次分析建模過程都需要從零開始,無法利用過往的參數優化經驗.
2.1.4 基于搜索的參數優化方法
基于搜索的參數優化方法將數據庫系統的參數優化建模為一個黑盒優化問題,并試圖采用搜索算法解決該問題,搜索的目的是為了評估不同的參數配置,并找到獲取最優性能的參數配置.
Zhu 等人[37]提出一個針對多種系統的參數優化框架BestConfig,該框架在指定優化時間約束、待優化系統和資源配置的條件下,采用劃分和分支采樣方法、遞歸界限搜索算法自動對該系統的配置參數進行優化.在方法評估部分對包括MySQL 和Cassandra數據庫在內的6 種軟件系統進行了實驗驗證.
基于搜索的參數優化方法能夠直接在參數空間中進行搜索,無需深入系統內部的先驗知識,方法的適應性較強.然而,這類方法難以利用優化過程中已有的知識和規律,優化效果通常不佳.
通過對比和分析可以看出,傳統的方法在給定的優化約束條件下往往不能得到最優的效果,因此并不是解決數據庫參數優化問題時的最好選擇.另一方面,傳統方法對于每次參數優化任務都需要重新進行整個參數優化過程,不能充分利用過往調優任務中已獲取的數據和知識來進一步提升調優效果.這一問題不僅會浪費大量的時間和資源成本,也大大限制了參數優化能力的提升.
隨著機器學習技術的不斷發展與成熟,目前機器學習已經作為一種基礎服務技術,在醫療、汽車等不同領域中進行應用,具備了一定的解決實際問題的能力.因此,許多研究人員試圖通過機器學習技術來解決傳統數據庫參數優化方法中的不足與限制.
傳統的參數優化方法通常需要大量專家知識去制定有效的規則和建立可靠的模型,或者通過不斷采樣對參數空間進行搜索的方式尋找最優參數配置.不同于傳統參數優化方法,機器學習可以通過在大量數據中學習獲取輸入空間到輸出空間的映射關系,從而能對任意輸入的輸出進行較為準確的預測.在參數優化問題中,由于參數空間巨大且復雜,收集訓練樣本費時費力,獲取大量的有標簽樣本是非常困難的.因此,進行有效的參數選擇(特征選擇)以及選用合適的機器學習模型是至關重要的.
2.2.1 參數選擇方法
在參數選擇方面,盡管數據庫系統中存在數百個配置參數,但并不是每個配置參數都會對系統性能產生顯著影響.為了避免時間和精力被浪費在調整那些可能對性能沒有影響或影響較小的參數上,識別影響最大的參數對數據庫參數優化任務是至關重要的.目前,最常用的方法是根據專家經驗來選擇參數,同時也有一些研究人員嘗試使用機器學習或其他技術來排序或識別與性能相關性較強的重要參數,例如Lasso[3]和方差分析(analysis of variance,ANOVA)[38]等.
SARD[39]是一種基于Plackett &Burman 統計設計方法的數據庫參數排序統計方法.SARD 將查詢工作負載和配置參數的數量作為輸入,僅需要進行線性數量的實驗,就可以獲得數據庫參數對DBMS 性能產生影響大小的排序列表.
Lima 等人[40]則采用了一種包裹式特征選擇方法——遞歸特征消除(recursive feature elimination,RFE),通過有監督學習方法來評估參數子集的質量,迭代地減少數據庫參數集.該監督學習算法在這個過程中扮演2 個角色:1)通過評估預測的性能指標來評估一組參數的質量;2)利用線性回歸(給變量賦權)或決策樹(計算每個變量的基尼系數)等方法,對參數的重要性進行排序.并在此基礎上進行性能預測模型構建,根據數據庫和工作負載參數的值對性能指標進行預測.構建性能預測模型采用了3 種不同的機器學習模型:梯度提升機(gradient boosting machine,GBM)、隨機森林(random forest,RF)和決策樹(decision tree,DT),這些非線性模型也可以評估參數子集的質量.實驗結果表明用參數子集訓練的模型比用整個參數集訓練的模型更準確,證明了進行參數選擇的必要性.
根據參數優化方法中使用的不同機器學習模型,本文可以將現有研究成果分為基于傳統機器學習的參數優化方法和基于深度強化學習的參數優化方法2 類,如表1 所示.表1 中羅列了基于機器學習的數據庫參數優化和性能預測方法,以及方法中所使用的機器學習技術、訓練難度以及實現目標.其中,訓練難度通過綜合考量機器學習模型復雜度、技術難易度以及訓練時長進行評價,星號越多表示訓練難度較高.
2.2.2 基于傳統機器學習的參數優化方法
針對某個數據庫系統,基于機器學習的參數優化方法首先需要對不同配置參數取值下的系統性能進行采樣,然后基于訓練樣本構建性能預測模型,最后基于性能預測模型,采用某種搜索算法尋找最優配置.由于性能預測模型是參數優化的基礎,本文中也考慮了部分與參數優化相關的性能預測方法.

Table 1 Machine Learning-Based Parameter Tuning and Performance Prediction Approaches for Database Systems表1 基于機器學習的數據庫系統參數優化與性能預測方法
iTuned[1]是一個基于機器學習方法自動識別最優數據庫參數配置的工具,通過2 個步驟搜索參數空間.首先,通過拉丁超立方體采樣(latin hypercube sampling,LHS)在備份環境中選擇初始樣本.接下來,iTuned 基于上一步獲取的樣本構建了基于高斯過程模型的性能曲面,并根據預期改進函數選擇下一個采樣點,在該采樣點對應的參數配置下再次進行實驗,得到實驗結果后更新性能曲面.之后不斷循環迭代,直到取得滿意的性能值后終止這一過程.在這一過程中,基于高斯過程模型的性能曲面將與實際性能曲面不斷接近,iTuned 也可以盡快尋找到最佳參數配置.
與iTuned 類似,OtterTune[3,41]也提出了一種自動數據庫參數優化策略,它的創新之處在于可以利用以前參數優化的經驗,并結合新的樣本來優化數據庫參數.為了實現這一目標,OtterTune 綜合使用了有監督和無監督的機器學習方法.圖2 顯示了整個流程,包括3 個階段:1)工作負載特性描述(刪除冗余度量指標);2)重要參數識別;3)自動調優.在階段1 中,OtterTune 首先利用因子分析將高維度量數據降維成為低維度量數據,然后使用k-means 將低維數據聚類成有意義的分組.通過這2 種降維技術能夠有效地去除冗余度量指標,并進一步使用這些內部運行時的度量對工作負載的行為進行描述,以便識別數據儲存庫中相似的工作負載.這使得OtterTune 能夠利用從以前的調優任務中收集到的信息,幫助在新的應用程序下搜索表現良好的參數配置.在階段2 中,Otter-Tune 選擇對目標性能影響最大的重要參數集,減少調優參數的數量能夠有效降低需要考慮的參數配置的總數,從而減少機器學習算法的搜索空間.因此,本階段使用Lasso[52]來篩選與系統整體性能相關性最強的參數,并確定參數的重要性順序.在階段3 中,OtterTune 的目標是推薦性能最優的配置.OtterTune首先根據階段1 選擇的工作負載特征,將數據儲存庫中最相似的工作負載與當前工作負載進行匹配,最后使用高斯過程回歸[53]推薦具有最佳性能的參數配置.數據儲存庫中保存了之前工作負載下的樣本及對應的性能曲面,在新的調優任務中可以使用加噪聲的舊性能曲面作為初始性能曲面,再通過與iTuned一樣的采樣更新迭代方式尋找最優參數配置.這種方式可以緩解對大量初始樣本的需求,并且有效提升搜索尋優的效率.Ishihara 等人[42]提出的參數調優系統也是采用高斯過程回歸來尋找最優的DBMS 參數配置,并應用于工作中的數據庫管理系統.

Fig.2 OtterTune machine learning pipeline[3]圖2 OtterTune 機器學習流程[3]
針對云數據庫緩沖池調優問題,Tan 等人[43]設計了iBTune.利用來自相似工作負載的信息來找出每個數據庫實例的可容忍錯誤率,之后利用錯誤率和分配的內存大小之間的關系來分別優化目標緩沖池大小.同時,iBTune 還通過一個成對的深度神經網絡來預測請求響應時間的上限.緩沖池大小調優只能在預測的響應時間上限處于安全限制的條件下執行.
Rodd 等人[44]提出了一種基于神經網絡的參數優化算法.通過主動監測數據庫的關鍵性能指標并作為神經網絡的輸入,經過訓練的神經網絡能夠為所需的緩沖區大小估算出合適的數值.Zheng 等人[45]也提出了一種基于神經網絡的性能自調優算法.首先通過提取自動工作負載存儲庫報告,識別關鍵的系統參數和性能指標;然后利用收集的數據構建一個神經網絡模型,最后采用一個自調優算法對這些參數進行優化.
ACTGAN[46]則是一種基于生成式對抗網絡(generative adversarial network,GAN)的系統參數優化方法.該方法首先采用隨機采樣得到初始樣本,并從中挑選性能較好的參數配置作為GAN 的訓練樣本,通過對抗學習推薦潛在的、具有更好性能的參數配置.Siegmund 等人[47]通過結合機器學習和抽樣啟發方法,為可配置系統生成性能影響模型.Nair 等人[48]針對建立精確性能模型所需成本高的問題,提出了一種基于排序的性能預測模型,實驗結果表明這種精度較差的模型可用于對配置進行排序,并進一步確定最優參數配置.Ha 等人[49]提出了一種結合深度前饋神經網絡和L1 正則化的系統性能預測方法DeepPerf,可以對具有二進制和/或數值型參數的系統性能進行預測.文獻[46-49]所述的4 個工作雖然研究對象為軟件系統,但均適用于數據庫管理系統,并通過實驗對方案有效性進行了驗證.其中包含了1 個參數優化方案[46]和3 個性能預測方案[47-49].性能預測方案能夠實現對不同配置的系統性能預測,從而進一步實現性能優化等數據庫系統管理任務.
文獻[1,3,41-49]所述方法的區別不僅在于使用模型的不同,在整個調優框架中也有所不同.基于傳統機器學習的方法往往采用“參數選擇—采樣—預測模型建立—最優參數配置搜索”這種管道式框架進行參數調優.對于參數選擇,多數方法利用專家知識進行人工選擇[1,46,48],一部分工作通過Lasso[3,49]和ANOVA[38]等方法進行,也存在少量針對數據庫的緩沖區大小進行研究的工作[43-44].采樣方法的選擇多數為隨機采樣和LHS,這2 種采樣方法在實際應用中均取得較好的結果.預測模型的不同選擇在表1 中進行羅列,使用較多的機器學習模型包括高斯過程回歸和神經網絡.高斯過程回歸計算速度高,但無法精確擬合性能曲面;神經網絡學習能力較強,適用于非線性函數擬合,然而訓練難度較高.最后,最優參數配置搜索方法的選擇與性能預測模型的類型息息相關,例如對高斯過程回歸大多使用貝葉斯優化來確定最優參數配置[1,3],也有少部分工作無需進行這一搜索過程,如ACTGAN[46]直接通過GAN 來推薦性能較好的參數配置.
綜上所述,基于傳統機器學習的方法能夠較好地解決數據庫參數優化問題,通過利用過往參數優化任務的數據,加快調優任務的進程,且具有較強的普適性,能應用于不同類型的數據庫參數優化任務中.但是,這種方法仍存在一些局限性.首先,機器學習方法需要大規模高質量的訓練樣本,這在數據庫系統中往往是難以獲取的.其次,基于傳統機器學習的方法往往采用上述管道式框架進行參數調優,然而在每個階段獲得的最優解并不能保障在下一階段仍是最優解,在前面的階段中獲得的結果將直接影響最終的參數優化結果.最后,由于數據庫系統具有高維連續且復雜的參數空間,通過簡單的機器學習模型(如高斯過程模型)往往很難擬合出精確的性能變化曲面.即使能夠擬合出精確的性能變化曲面,尋找該復雜曲面上的最優解仍是NP-hard 問題.考慮到上述問題,一些研究人員開始嘗試引入功能更加強大的強化學習來解決數據庫參數優化問題.
2.2.3 基于深度強化學習的參數優化方法
為了解決基于傳統機器學習的參數優化學習方法中存在的問題,一些研究人員開始嘗試使用強化學習對數據庫參數進行優化,這種方式既不需要先驗知識,也無需對復雜的性能曲面進行擬合.參數優化可以抽象為馬爾可夫決策過程,在執行工作負載的過程中,數據庫的狀態也不斷發生變化,在每一個時刻策略算法根據當前數據庫狀態進行動作,即選擇要調整的參數及其數值;完成調整后,數據庫將更新狀態,并根據更新后的狀態進行下一步動作,如此反復迭代直至負載執行結束.使用強化學習多次重復上述過程,就可以找到最適合該負載的數據庫參數配置.
針對云數據庫的參數優化問題,Zhang 等人[50]利用深度強化學習方法提出了一種端到端的參數優化系統CDBTune.該系統采用試錯策略,通過有限的樣本進行學習,降低了對大量高質量樣本采集的需求.并且通過獎勵反饋機制實現了端到端學習,能夠在高維連續空間中尋找最優參數配置,加快模型的收斂速度,提高了在線調優的效率.CDBTune 使用強化學習的主要挑戰是將數據庫參數優化場景映射到強化學習中的適當操作.圖3 描述了強化學習中6 個關鍵元素的交互關系,并展示了CDBTune 中6 個元素與數據庫參數優化之間的對應關系.
1)智能體.智能體可以看作是調優系統CDBTune,它接收來自云數據庫的獎勵(即性能差異)和狀態,并更新策略來指導如何調整參數以獲得更高的獎勵(更高的性能).
2)環境.環境是調優對象,具體來說是一個云數據庫實例.
3)狀態.狀態表示智能體當前的狀態.當CDBTune推薦一組參數配置并由云數據庫執行時,內部指標可以用來表示云數據庫的當前狀態,例如在一段時間內從磁盤讀取或寫入頁面的計數器.

Fig.3 The correspondence between reinforcement learning elements and parameter tuning[50]圖3 強化學習元素與參數優化的對應關系[50]
4)獎勵.獎勵是一個標量,表示當前時刻的性能與前一時刻或初始設置時的性能差異,即在云數據庫執行當前時刻CDBTune 推薦的新參數配置后產生的性能變化.
5)動作.動作來自參數配置空間,相當于參數調節操作.云數據庫在相應的狀態下根據最新的政策執行對應的動作.1 次動作代表1 次增加或減少所有可調參數值.
6)策略.策略定義了CDBTune 在特定時間和環境中的行為,它是從狀態到動作的映射.給定一個云數據庫狀態,如果一個動作(即參數調優)被調用,策略通過在原始狀態上應用該動作來維持下一個狀態.這里的策略指的是深度神經網絡,它保存輸入(數據庫狀態)、輸出(參數)和不同狀態之間的轉換.強化學習的目標是學習最佳策略.
強化學習工作過程中,云數據庫是目標調優系統,可以被視為強化學習的環境.CDBTune 中的深度強化學習模型則是強化學習中的智能體,主要由深度神經網絡(策略)組成,其輸入是數據庫狀態,輸出是狀態對應的推薦參數配置.
當CDBTune 系統收到用戶的在線調優請求后,首先會從用戶處收集查詢工作負載,獲取當前參數配置并執行獲取對應性能;然后使用離線訓練的模型進行在線參數優化;最后給出參數配置.若優化過程終止,系統還會更新強化學習模型和內存池.
此外,Li 等人[51]提出了一種基于深度強化學習的查詢感知數據庫參數調優系統QTune.QTune 考慮了SQL 查詢的豐富特性(包括查詢類型和查詢成本等),并將查詢特性提供給深度強化學習模型,從而動態選擇合適的參數配置.與傳統的深度強化學習方法不同[54-55],QTune 采用了一種使用Actor-Critic 網絡的雙態深度確定性策略梯度(double-state deep deterministic policy gradient,DS-DDPG)模 型.DSDDPG 模型可以根據數據庫狀態和查詢信息自動學習Actor-Critic 策略來解決調優問題.此外,QTune 提供了3 種數據庫調優粒度:1)查詢級調優;2)工作負載級調優;3)集群級調優.查詢級調優為每個SQL查詢搜索良好的參數配置,這種方法可以實現低時延,但由于不能并行運行SQL 查詢,吞吐量較低.工作負載級調優能夠為查詢工作負載推薦良好的參數配置,這種方法可以實現高吞吐量,但不能為每個SQL查詢找到良好的參數配置,因此時延較高.集群級調優則將查詢進行聚類分組,并為每個組中的查詢找到良好的數據庫參數配置.為了實現查詢聚類,QTune采用了一種基于深度學習的查詢聚類方法,能夠根據查詢所適用參數配置的相似性對查詢進行分類.這種方法可以實現高吞吐量和低時延,因為它可以為一組查詢找到良好的參數配置,并在每個組中并行運行查詢.因此,QTune 可以根據給定的需求在時延和吞吐量之間進行權衡,并同時提供粗粒度和細粒度調優.
在深度強化學習技術的支持下,CDBTune 和QTune 這類基于深度強化學習的參數優化方法能夠高效地完成數據庫參數優化任務,同時不需要大量的有標簽數據.其中CDBTune 可用于云數據庫,支持粗粒度的參數優化(例如工作負載級別的參數優化),但不能提供細粒度的參數優化(例如查詢級別的參數優化).Qtune 能夠提供不同粒度的調優,但目前仍基于單機數據庫,沒有解決在分布式集群上為多個數據庫實例進行參數優化的問題[6].
針對數據庫參數優化問題,研究人員進行了一系列工作來試圖理解配置參數與系統性能之間的關系,并進一步推薦好的參數配置.然而,現有的方法通常關注于固定的環境,得到的最優參數配置也是針對某一特定環境的.如果這些環境因素中的任何一個發生改變時,就必須重新進行參數優化.這就意味著在當環境發生變化時,在之前環境中進行參數調優中花費的精力不能重用,必須從頭進行新的參數優化任務,這將造成巨大的資源和時間浪費.例如,基于傳統機器學習的數據庫參數優化方法中往往需要建立一個性能預測模型,并利用該模型尋優.在實際系統中,由于環境的改變,之前的性能預測模型往往不再有效,因此需要建立新的性能預測模型以滿足數據庫系統管理的需求.然而,機器學習方法對樣本的高要求和用戶對快速獲得新系統性能預測模型的需求產生了矛盾.構建良好的系統性能預測模型往往需要大量的樣本,但是收集樣本需要大量的時間成本,這使得新環境下的系統性能預測模型建立費時又費力.
為了避免上述問題,研究人員將遷移學習的概念引入到數據庫系統的參數優化中.利用其他環境中的知識(例如性能度量樣本或性能預測模型)來輔助進行性能建模和優化任務,已成為近年來的研究熱點.目前關于這一問題的研究工作相對較少,其中一些研究工作集中于應對3 類環境變化中的某一種,也有一部分研究工作可應用于多種不同的環境變化場景中,如表2 所示.本文對這些研究工作進行分類介紹.

Table 2 Parameter Tuning and Performance Prediction Approaches for Database Systems Under Environmental Changes表2 變化環境下的數據庫系統參數優化與性能預測方法
工作負載的變化將對配置參數與系統性能的關系產生影響,進而對參數優化的結果產生影響[38,41,57].一方面,配置參數的選擇可以對系統性能產生較大的影響;另一方面,在不同的工作負載條件下,配置參數對系統性能產生的影響會發生較大的改變.當工作負載變化后,如果繼續采用在之前工作負載下選定的最優參數配置,可能會造成較大的性能下降.因此,自動參數優化方法需要根據工作負載的變化調整數據庫的參數配置推薦,從而達到最優的性能表現.
為了重用過去參數優化的經驗,OtterTune[3,41]篩選部分運行時統計信息來描述工作負載,并根據工作負載特征向量之間的歐氏距離,將目標工作負載映射到一個之前進行過參數調優且相似性較高的工作負載.然后,OtterTune 重用類似工作負載中的數據來訓練高斯過程模型,并通過添加來自目標工作負載的性能度量樣本來更新模型.在這個過程中,OtterTune 可以降低為新工作負載進行參數優化所需要的時間和資源.
針對OtterTune 等自動參數調優方法中采用的靜態負載描述不夠準確的問題,沈忱等人[56]提出了一種動態負載的時序描述方式和動態負載匹配算法.首先通過動態負載描述方法來更準確地刻畫負載變化;然后,對于負載匹配中序列不規則、歐氏距離算法不再適用等問題,基于動態時間規整算法提出了一種使用數據對齊思想的動態負載匹配算法;最后,將所提出的方法應用于OtterTune 中,形成了基于動態負載的調優工具D-OtterTune.
Rafiki[38]是一個能夠在動態工作負載下實現數據庫參數優化的中間件.Rafiki 將待優化數據庫系統視為黑盒,通過與OtterTune 類似的工作流程進行參數推薦.首先,通過ANOVA 從所有參數集合中識別關鍵參數,以便減少計算復雜度和模型訓練的數據收集開銷;其次,訓練神經網絡作為代理模型來預測數據庫吞吐量;最后,基于代理模型通過遺傳算法進行參數優化,從而最大化系統性能.文獻[3,41,56]所述的方法能夠適用于各種類型的數據庫,但考慮到非關系型數據庫能夠更好地滿足高性能計算應用中海量半結構化數據的存儲和分析需求,該研究選取非關系型數據庫作為研究對象進行了深入探究.為了應對動態工作負載變化,Rafiki 在代理模型中直接包含了工作負載特征和最具影響力的參數,這種方式可以通過參數配置的較大變化來快速地應對工作負載的較大變化.當工作負載發生變化時,應用Rafiki 提供參數推薦進行重新配置需要同時關閉所有服務器實例,更改它們的參數配置,并重新啟動所有服務器實例.
雖然Rafiki 可以為靜態工作負載自動識別接近最優的配置,但忽略了3 個問題:1)在重新配置過程中,數據庫重新啟動會造成性能下降;2)需要預測新的工作負載模式持續的時間;3)在重新配置期間是否能夠滿足應用程序的可用性需求.SOPHIA[57]通過結合工作負載預測和成本效益分析器的優化技術來解決上述3 個問題.SOPHIA 計算每個重新配置步驟的相對成本和收益,并為未來的時間窗確定一個最佳的參數配置.該方法能夠指定何時更改參數配置,以及更改的參數和其相應數值,從而在不降低數據可用性的情況下獲得最佳性能.
SOPHIA 針對集群非關系型數據庫進行數據庫配置參數優化,能夠處理動態工作負載.然而SOPHIA的設計只關注參數優化調優,沒有考慮云虛擬機(virtual machine,VM)配置,以及VM 和數據庫配置之間的依賴關系.OPTIMUSCLOUD[58]考慮了數據庫級和VM 配置之間的依賴關系,針對動態工作負載對數據庫和云配置參數進行聯合調優.OPTIMUSCLOUD將性能模型與工作負載預測器和成本效益分析器結合起來,當工作負載發生較大變化時將采用新配置,并決定應該重新配置哪些服務器.首先,OPTIMUSCLOUD 使用待調優數據庫的歷史數據來訓練工作負載預測模型.其次,訓練第1 個基于隨機森林(RF)的性能預測模型,能夠預測任意給定配置參數集(包括數據庫和VM)下單個服務器的性能.之后,訓練第2 個RF 模型作為集群級別的性能預測模型來預測異構服務器集群的吞吐量.最后,在線階段中,OPTIMUSCLOUD 優化器利用上述預測模型來評估不同VM/應用程序配置的適用性,搜索最佳配置,在給定的預算內提供最佳性能.
Kossmann 等人[59]提出了一種自管理數據庫系統,通過同時考慮工作負載預測和運行時性能監視來及時確定調優點.一旦調整了配置參數,之前的配置參數實例就被存儲起來,以便為過去的決策建立反饋循環,幫助從過去的自管理決策中學習.Kossmann 等人[60]還提出了一種基于組件的自治數據庫系統框架,自治數據庫系統需要自動調整其物理設計和配置,因此面臨多方面的挑戰:系統必須預測未來的工作負載,有效地找到健壯的配置,并不斷從決策中學習知識并應用于之后的決策中.該框架通過關注點分離,以低開銷實現數據庫集成和自管理功能的開發,并通過一種基于線性規劃的算法為多個相互依賴參數的優化提供有效的調優命令.
Mühlbauer 等人[61]將軟件配置和版本變化2 個視角結合在一起,提出一種可以識別跨軟件變體和系統版本的性能變化的方法.通過迭代地對配置和版本進行采樣并測量各自的性能,不斷更新性能變化可能性模型,從而實現對可配置軟件系統的性能變化進行回顧性檢測,并將其定位到特定的選項或交互.
Valov 等人[62]研究了如何利用遷移學習來增強系統性能預測模型的通用性.性能預測模型在不同硬件平臺間的遷移主要分為3 個步驟:1)性能預測模型的訓練,采用分類與回歸樹構建性能預測模型;2)線性遷移模型的訓練,通過簡單的線性回歸模型將知識從相關環境轉移到目標環境;3)預測結果的遷移.
與文獻[62]所述的直接遷移模型的方法不同,目前還有另一種重用源環境數據的方法DataReuseTL[63],該方法通過高斯過程模型等學習器來捕獲不同環境之間的相關性.DataReuseTL 只需要從目標環境中采樣少量樣本,并通過其他相關環境的樣本學習到準確的性能模型,并進一步調優.該方法涵蓋了不同類型的環境變化場景,包括工作負載、硬件環境和數據集的變化.
ResTune[64]將面向資源的數據庫參數優化問題定義為一個約束貝葉斯優化問題.為了加速優化過程,ResTune 采用一種元學習策略來提取歷史任務的調優經驗,通過多個模型(基學習器)來表示先驗知識,并通過一個集成模型(元學習器)來有效聯合利用過往的調優經驗.元學習器通過元特征和模型預測來衡量各個基學習器對目標工作負載的有用性.通過這種方式,ResTune 可以相應地利用現有數據并加速參數優化過程.該方法可以在不同的工作負載和異構的硬件環境中遷移知識.
近年來的研究表明,遷移學習可以通過跨環境遷移關于性能表現的知識,來降低在目標環境中構建性能預測模型的成本.然而,值得探討的是遷移學習為何有效,以及何時對性能建模任務有效.Jamshidi等人[65]使用了多種統計和機器學習技術對這一問題進行研究,并得出關鍵結論:在不同的環境中存在不同形式的可遷移知識,這有助于性能預測模型的學習.在較小的環境變化中,遷移學習可以采用簡單的線性形式;而對于較大的環境變化,可遷移的知識可以用于更有效的采樣.
在文獻[65]所述的探索性分析的基礎上,Javidian等人[66]利用因果分析來識別遷移學習可用的關鍵知識內容.因果分析證實配置參數的因果影響可以在不同環境中以高可信度進行遷移.文獻[65-66]的2個研究工作都可以為性能預測的知識遷移提供新的見解,這些見解有助于在跨環境條件(工作負載、硬件和軟件版本改變)下快速且低成本地學習到更準確的性能模型.
此外,遷移學習僅在源環境與目標環境相似的情況下才有效.因此,BEETLE[67]研究了從何處進行學習的問題.首先,通過競賽算法對候選環境進行順序評估,確定哪一個可用環境最適合作為源環境,即Bellwether 環境.一旦確定了Bellwether 環境,就可以通過重用源環境的性能度量樣本來構建目標環境預測模型,并基于該模型尋找目標環境中的最優參數配置.該研究考慮了3 種環境變化場景:工作負載、硬件環境和軟件版本變化.
目前環境變化下的數據庫參數優化方法中,針對工作負載變化的參數優化方法研究較多,主要研究了如何在工作負載變化場景下動態進行最優參數推薦[3,38],以及討論何時進行上述操作的研究[58-59].然而,針對軟件版本變化、硬件配置變化以及多種環境變化場景的參數優化還有待進一步研究,現存的研究著重關注這些環境變化下軟件系統性能模型之間存在的關聯性和可遷移知識,并試圖通過遷移學習利用不同環境間存在的可遷移知識來加速新環境下性能預測模型的建立,為下一步的參數優化工作奠定基礎.針對環境變化的性能預測研究均適用于數據庫管理系統,并通過實驗進行了驗證.
數據庫管理系統有大量配置參數,這些參數控制了系統的內存分配、I/O 優化、備份與恢復等諸多方面,對數據庫的性能具有極大影響.因此這些參數需要進行優化以提升系統性能.但是由于數據庫配置參數數量眾多,而且不標準(即不同數據庫系統對同一個參數設置使用不同的名稱)、不獨立(即更改1 項參數會影響其他參數的效果)、且不通用(即最佳配置取決于目標環境),所以對參數進行優化十分困難.隨著數據庫和應用程序的規模和復雜性的不斷增長,手動配置系統參數來滿足應用程序的需求己經超過了DBA 的能力.此外,調優得到的最優參數配置是特定于工作環境的,如果環境發生了改變,就必須重新進行參數調優過程.目前工業界和學術界針對數據庫參數優化問題進行了大量相關研究,這些研究工作通過不同的方法解決這些問題,一些工作試圖在不同參數配置下準確預測系統的性能,還有一些工作嘗試在不同場景下找到接近最優的參數配置.
本文對這些研究工作進行了對比總結,根據不同的應用場景分為固定環境下的數據庫參數優化方法和變化環境下的數據庫參數優化方法.目前大量的研究工作主要集中于固定環境下的數據庫參數優化方法,對變化環境下的數據庫參數優化方法的研究工作相對較少,并且不夠深入.其中,固定環境下的數據庫參數優化方法分為傳統的參數優化方法和基于機器學習的參數優化方法2 類,并針對不同類別進行介紹;變化環境下的數據庫參數優化方法則根據不同的環境變化場景進行分類介紹.
本文通過對比分析,對每種方法的優勢和不足進行了總結.在6 種固定環境下的數據庫參數優化方法中:1)手工參數優化方法能夠在一定程度上解決參數優化問題,但會產生大量的人力、資源成本開銷;2)基于規則的參數優化方法可以進行輔助決策,易于實現部分參數優化,然而該方法不具有通用性,且僅能優化少量特定的參數;3)基于模型的參數優化方法在部分場景下具有良好的準確性,但需要深入了解系統內部結構,構建好的模型也不具有復用性;4)基于搜索的參數優化方法無需深入系統內部,是一種適應性較強的方法,但是由于無法利用過往的調優經驗,優化效果通常不佳;5)基于傳統機器學習的參數優化方法也無需深入了解系統內部,通過對系統性能的實際觀察進行學習,但它的缺點是機器學習方法需要大規模高質量的訓練集,此外,該方法采用管道式優化框架,每一步的效果都會對后續優化過程產生影響;6)基于深度強化學習的參數優化優化需要適應環境的動態變化性.本文對各種方法在3 種不同維度的能力進行了評估,包括處理復雜參數空間的能力、對樣本的需求和不同工作環境下的動態變化性,如表3 所示.例如,基于傳統機器學習的參數優化方法處理復雜參數空間的能力中等,對樣本的需求量較大,在不同工作環境下的動態變化性較差;而變化環境下的參數優化方法處理復雜參數空間的能力較強,對樣本的需求中等,在不同工作環境下具有較高的動態變化性.方法則對樣本的需求量較小,可實現端到端的參數優化,但是訓練時間較長;7)變化環境下的數據庫參數優化方法能夠適應動態運行環境,并且利用其他環境下參數優化的經驗,然而這類方法目前的研究不足,且只適用于長時間運行的查詢/應用程序.
針對數據庫參數優化的三大挑戰包括:1)參數數量、種類較多且存在依賴關系導致的參數空間復雜性;2)收集樣本數據成本高昂且耗時導致的樣本不足;3)最優參數配置在不同環境下并不通用,參數

Table 3 Comparative Evaluation of the Various Approaches for Parameter Tuning表3 各種參數優化方法的對比評估
除了將各類參數優化方法在應對數據庫參數優化三大挑戰時的能力進行對比之外,本文根據每種方法的優缺點及目前研究工作中展示的實驗結果[3,50-51,64],對各種參數優化方法的精確性和通用性進行了對比分析,結果如表3 所示.
1)手工參數優化方法雖然能夠獲得不錯的優化效果,但對專家知識的要求非常高,不僅會耗費大量的人力、資源成本,也需要提供大量時間給DBA 來進行不斷試錯以達到預期的系統性能優化效果.因此,實現自動參數優化是未來數據庫參數優化發展的必然趨勢.
2)基于規則的參數優化方法精確性和通用性都較差,可以用于幫助用戶根據專家經驗、在線教程或參數優化說明進行參數優化輔助決策.
3)基于模型的參數優化方法也對專家知識有較高的需求,對性能樣本的需求較低.這類方法在特定場景下具有良好的精確性,是目前在實際工程中大量應用的方法,但通用性較差,對于不同的數據庫類型或應用場景都需要重新構建模型.
4)基于搜索的參數優化方法無需對數據庫系統深入理解,通用性較強.然而,由于需要多次實際運行,該方法比較耗時,且難以利用優化過程中已有的知識和規律,優化效果有待提升.
5)基于傳統機器學習的參數優化方法也視數據庫系統為黑盒,具有較強的通用性,且具有從歷史任務中學習的能力.然而,這種方法對訓練樣本的質量和數量都有較高的要求,優化效果會因訓練樣本的差異和方法的管道式框架而不穩定.基于搜索的方法和基于傳統機器學習的方法更適合對系統內部沒有深入了解的用戶使用,為了獲得更好的調優效果,應允許多次實際運行系統以搜索最優解或收集訓練樣本.
6)基于深度強化學習的參數優化方法引入了功能更為強大的深度強化學習,降低了對樣本的需求,獲得更優的優化效果,且對環境的變化具有一定的適應能力.然而,該方法訓練時間較長,且需要獲取內部指標來表示數據庫的當前狀態,因此通用性較上面2 種黑盒優化方法稍弱.
7)變化環境下的數據庫參數優化方法能夠遷移其他環境中的性能優化知識來幫助進行性能建模和優化任務,在降低樣本需求的同時提升了精確性.但是使用該方法的前提是已有其他環境中參數優化經驗的記錄,例如性能度量樣本或性能預測模型,否則算法將面臨冷啟動問題.
不同參數優化算法的適用場合應該綜合考慮表3中5 個維度的表現進行選擇,重點是動態變化性和通用性2 個方面.其中,動態變化性用于衡量一個參數優化算法在某一特定的數據庫系統中是否具有適應環境的改變的能力;而通用性則表示該參數優化算法在不同的數據庫系統中是否具有普適性.
針對數據庫參數優化問題,目前的研究成果還存在諸多不足,不能有效指導參數優化過程.歸納起來,主要的研究方向與挑戰有3 個方面:
1)基于機器學習的數據庫參數優化
在機器學習蓬勃發展的背景下,將機器學習應用于數據庫系統中來改進系統性能是目前的研究熱點之一.通過對現有研究工作進行分析,可以看出基于機器學習的數據庫系統參數優化方法的研究力度最大,是目前的主流研究方向.然而機器學習方法對樣本數量和質量有較高的要求,這在實際應用場景中是難以提供的.
針對樣本數量有限這一問題,基于機器學習的參數優化工作可以從2 個角度進行解決.首先是研究如何對數據庫系統的高維參數空間進行自動降維,包括高效的參數選擇和采樣方法,以較低成本構建少量的、能夠有效刻畫系統性能分布的高質量樣本,為基于機器學習的數據庫參數優化方法提供有效的支撐與保障.同時,如何在少量樣本情況下對系統進行性能建模與參數優化還需要進行系統性研究.一方面,通過學習能力強的模型對少量樣本提供的先驗知識進行學習和利用,進一步提升優化效率;另一方面,考慮引入遷移學習的概念,利用其他環境性能建?;騾祪灮〉玫慕涷灒瑏韼椭谛颅h境中通過少量樣本進行建模或優化工作.這種方法不僅能幫助解決樣本數量有限的問題,還能在變化環境的場景下進行參數優化,適用于動態運行環境.
2)基于遷移學習的數據庫參數優化
大數據時代下,隨著數據庫系統更多地部署在云服務器中,工作負載的規模不斷增大,工作負載的類型也不斷豐富,異構性突出.工作負載的快速變化及其多樣性要求數據庫系統能夠智能且動態地調整系統參數以達到最佳運行時狀態.在云環境下,計算和存儲資源可以視為是無限的,理論上數據庫系統可以立即執行對資源的配置,進行靈活地縮減或擴張.針對不同的預算、應用和負載特性等,人們往往會為數據庫配置不同的硬件環境和軟件版本.而不同的硬件環境和軟件版本將對參數優化的實際表現產生很大的影響.例如,很多參數與硬件強相關,且隨著版本變遷會增減,參數的取值范圍也會有一定差異.在這種情況下,傳統的固定環境下的數據庫參數優化已不能處理新應用場景下對系統性能的優化.當環境發生變化時,現有的樣本、系統性能模型和優化參數配置均會失效.在這種情況下,如何利用現有的優化知識,快速生成針對新環境的性能預測模型和優化參數配置是亟待解決的一個重要問題.
針對這一問題,Jamshidi 等人[65]對可配置系統在環境變化場景下系統性能模型的變化情況進行了初步研究,經過大量實驗發現,對于較小的環境改變,可以直接對現有的預測模型進行線性變換調整,而對于較為劇烈的環境變化,在源域和目標域之間仍然可以進行一定的知識遷移.經過調研現有研究工作可知,遷移學習方法在系統性能建模和參數優化方面是有效的,值得深入研究,但現有的相關研究工作數量還很少,研究不成熟,尚未有效解決該問題.因此,通過基于遷移學習思想的數據庫參數優化方法在發生環境變化時充分利用現有系統的優化知識,是未來的一個重要研究方向.
3)自治數據庫
由于數據庫的性能受到多個參數的共同影響,再加上可調參數數量、數據庫體量和業務量的劇增,導致傳統的參數優化方法無法再滿足用戶的需求.隨著自治數據庫技術的發展,自適應的數據庫參數調優技術成為了解決這一難題的主要方法之一.
Pavlo 等人[68]認為真正的自治DBMS 需要具備3 種能力:
①自動選擇進行何種操作以改進某項性能指標,如吞吐量、時延、成本.上述的操作主要包括改變數據庫的物理設計、改變DBMS 的參數配置,或改變DBMS 的物理資源.該選擇還需要考慮進行這一操作產生的資源消耗.
② 自動選擇何時進行這些操作.
③從上述行為中自動學習,并在沒有人工干預的情況下將過去決策的知識納入未來決策.
目前大多數的研究工作都專注于解決第1 個問題,也有一些工作試圖解決第2 個問題的一部分,但幾乎沒有最后一個問題的工作.這也正是自治DBMS最為困難的一個要求,DBMS 必須知道何時部署某一操作,以及這個操作是否有幫助.這就要求系統必須能夠預測未來的工作負載,并進行相應的計劃.目前的自治數據庫系統由于預測能力不足,通常是在問題發生后才做出反應,這種情況類似于一輛只能查看身后道路的自動駕駛汽車.然而,實現預測最大的挑戰在于環境在不斷發生變化,例如:硬件會根據操作而改變,工作負載也會隨著時間發生變化.
對應到自適應的數據庫參數調優問題,根據歷史負載信息,預測工作負載未來的變化趨勢是動態調優數據庫配置參數的基礎.根據預測信息,可以選擇適應當前環境的最優數據庫參數配置,并確定如何進行重新配置操作,從而保持或提升系統性能.這一過程中比較困難的問題是如何確定一次行動(即一次參數調整)的性能收益.這是由于環境不斷發生變化,因此必須研究如何從性能監測中分離出該調整產生的性能影響.最后,從上述根據預測進行調整的行動中進行學習,并將從過去決策中學習的知識應用于未來的決策之中.通過這些研究可以提高數據庫系統的易用性,使得數據庫系統面對多樣的環境變化能夠更加智能地動態調整數據庫系統的參數配置,實現數據庫系統的自動化.
本文對數據庫參數優化方法的研究現狀進行了綜述.首先對背景知識和研究問題進行了介紹,并給出數據庫參數優化問題所面臨的挑戰;然后對現有參數優化方法進行分類介紹.從問題層面出發,根據參數優化過程是否涉及環境變化,將現有工作分為固定環境下的參數優化方法和變化環境下的參數優化方法2 類,介紹現有方法如何解決數據庫參數優化問題.在固定環境下的數據庫參數優化方面,根據方法本身是否有從歷史任務中學習的能力,將現有方法分為傳統的參數優化方法和基于機器學習的參數優化方法2 類.其中,傳統的參數優化方法可細分為手工參數優化方法、基于規則的參數優化方法、基于模型的參數優化方法和基于搜索的參數優化方法;基于機器學習的參數優化方法可通過使用的機器學習技術進一步分為基于傳統機器學習的參數優化方法和基于深度強化學習的參數優化方法.在變化環境下的數據庫參數優化方面,本文根據每個方法應對的變化場景,將現有工作分為針對工作負載變化、針對軟件版本變化、針對硬件變化和針對多種環境變化4 個場景進行討論.最后,本文對研究現狀進行總結,對比分析了各種方法的優勢和不足,并給出了未來的研究方向與挑戰.
作者貢獻聲明:曹蓉負責相關文獻資料的收集、分析和論文初稿的撰寫;鮑亮提出綜述思路并指導寫作;崔江濤提出整體指導意見并修改論文;李輝針對研究現狀總結與討論提出指導意見并修改論文;周恒針對未來研究方向與挑戰提出指導意見并修改論文.