通過機器學習來自動調優 DBMS,讓任何人都可以部署資料庫管理系統

Panblack發表於2017-06-17

本文是卡耐基梅隆大學的 Dana Van Aken、Andy Pavlo 和 Geoff Gordon 所寫。這個專案展示了學術研究人員如何利用 AWS Cloud Credits for Research Program 來助力他們的科技突破的。

資料庫管理系統(DBMS)是任何資料密集應用的關鍵部分。它們可以處理大量資料和複雜的工作負載,但同時也難以管理,因為有成百上千個“旋鈕”(即配置變數)控制著各種要素,比如要使用多少記憶體做快取和寫入磁碟的頻率。組織機構經常要僱傭專家來做調優,而專家對很多組織來說太過昂貴了。卡耐基梅隆大學資料庫研究組的學生和研究人員在開發一個新的工具,名為 OtterTune,可以自動為 DBMS 的“旋鈕”找到合適的設定。工具的目的是讓任何人都可以部署 DBMS,即使沒有任何資料庫管理專長。

OtterTune 跟其他 DBMS 設定工具不同,因為它是利用對以前的 DBMS 調優知識來調優新的 DBMS,這顯著降低了所耗時間和資源。OtterTune 通過維護一個之前調優積累的知識庫來實現這一點,這些積累的資料用來構建機器學習(ML)模型,去捕獲 DBMS 對不同的設定的反應。OtterTune 利用這些模型指導新的應用程式實驗,對提升最終目標(比如降低延遲和增加吞吐量)給出建議的配置。

本文中,我們將討論 OtterTune 的每一個機器學習流水線元件,以及它們是如何互動以便調優 DBMS 的設定。然後,我們評估 OtterTune 在 MySQL 和 Postgres 上的調優表現,將它的最優配置與 DBA 和其他自動調優工具進行對比。

OtterTune 是卡耐基梅隆大學資料庫研究組的學生和研究人員開發的開源工具,所有的程式碼都託管在 Github 上,以 Apache License 2.0 許可證釋出。

OtterTune工作原理

下圖是 OtterTune 元件和工作流程

調優過程開始,使用者告知 OtterTune 要調優的最終目標(比如,延遲或吞吐量),客戶端控制器程式連線目標 DBMS,收集 Amazon EC2 例項型別和當前配置。

然後,控制器啟動首次觀察期,來觀察並記錄最終目標。觀察結束後,控制器收集 DBMS 的內部指標,比如 MySQL 磁碟頁讀取和寫入的計數。控制器將這些資料返回給調優管理器程式。

OtterTune 的調優管理器將接收到的指標資料儲存到知識庫。OtterTune 用這些結果計算出目標 DBMS 的下一個配置,連同預估的效能提升,返回給控制器。使用者可以決定是否繼續或終止調優過程。

 

注意

OtterTune 對每個支援的 DBMS 版本維護了一份“旋鈕”黑名單,包括了對調優無關緊要的部分(比如儲存資料檔案的路徑),或者那些會產生嚴重或隱性後果(比如丟資料)的部分。調優過程開始時,OtterTune 會向使用者提供這份黑名單,使用者可以新增他們希望 OtterTune 避開的其它“旋鈕”。

OtterTune 有一些預定假設,對某些使用者可能會造成一定的限制。比如,它假設使用者擁有管理員許可權,以便控制器來修改 DBMS 配置。否則,使用者必須在其他硬體上部署一份資料庫拷貝給 OtterTune 做調優實驗。這要求使用者或者重現工作負載,或者轉發生產 DBMS 的查詢。完整的預設和限制請看我們的論文

機器學習流水線

下圖是 OtterTune ML流水線處理資料的過程,所有的觀察結果都儲存在知識庫中。

OtterTune 先將觀察資料輸送到“工作流特徵化元件”(Workload Characterization component),這個元件可以識別一小部分 DBMS 指標,這些指標能最有效地捕捉到效能變化和不同工作負載的顯著特徵。

下一步,“旋鈕識別元件”(Knob Identification component)生成一個旋鈕排序表,包含哪些對 DBMS 效能影響最大的旋鈕。OtterTune 接著把所有這些資訊“喂”給自動調優器(Automatic Tuner),後者將目標 DBMS 的工作負載與知識庫裡最接近的負載進行對映,重新使用這份負載資料來生成更佳的配置。

我們來深入挖掘以下機器學習流水線的每個元件。

工作負載特徵化: OtterTune 利用 DBMS 的內部執行時指標來特徵化某個工作負載的行為,這些指標精確地代表了工作負載,因為它們捕獲了負載的多個方面行為。然而,很多指標是冗餘的:有些是用不同的單位表示相同的度量值,其他的表示 DBMS 的一些獨立元件,但它們的值高度相關。梳理冗餘度量值非常重要,可以降低機器學習模型的複雜度。因此,我們基於相關性將 DBMS 的度量值集中起來,然後選出其中最具代表性的一個,具體說就是最接近中間值的。機器學習的後續元件將使用這些度量值。

旋鈕識別: DBMS 可以有幾百個旋鈕,但只有一部分影響效能。OtterTune 使用一種流行的“特性-選擇”技術,叫做 Lasso,來判斷哪些旋鈕對系統的整體效能影響最大。用這個技術處理知識庫中的資料,OtterTune 得以確定 DBMS 旋鈕的重要性順序。

接著,OtterTune 必須決定在做出配置建議時使用多少個旋鈕,旋鈕用的太多會明顯增加 OtterTune 的調優時間,而旋鈕用的太少則難以找到最好的配置。OtterTune 用了一個增量方法來自動化這個過程,在一次調優過程中,逐步增加使用的旋鈕。這個方法讓 OtterTune 可以先用少量最重要的旋鈕來探索並調優配置,然後再擴大範圍考慮其他旋鈕。

自動調優器: 自動調優器元件在每次觀察階段後,通過兩步分析法來決定推薦哪個配置。

首先,系統使用工作負載特徵化元件找到的效能資料來確認與當前的目標 DBMS 工作負載最接近的歷史調優過程,比較兩者的度量值以確認哪些值對不同的旋鈕設定有相似的反應。

然後,OtterTune 嘗試另一個旋鈕配置,將一個統計模型應用到收集的資料,以及知識庫中最貼近的工作負載資料。這個模型讓 OtterTune 預測 DBMS 在每個可能的配置下的表現。OtterTune 調優下一個配置,在探索(收集用來改進模型的資訊)和利用(貪婪地接近目標度量值)之間交替進行。

實現

OtterTune 用 Python 編寫。

對於工作負載特徵化和旋鈕識別元件,執行時效能不是著重考慮的,所以我們用 scikit-learn 實現對應的機器學習演算法。這些演算法執行在後臺程式中,把新生成的資料吸收到知識庫裡。

對於自動調優元件,機器學習演算法就非常關鍵了。每次觀察階段完成後就需要執行,吸收新資料以便 OtterTune 挑選下一個旋鈕來進行測試。由於需要考慮效能,我們用 TensorFlow 來實現。

為了收集 DBMS 的硬體、旋鈕配置和執行時效能指標,我們把 OLTP-Bench 基準測試框架整合到 OtterTune 的控制器內。

實驗設計

我們比較了 OtterTune 對 MySQL 和 Postgres 做出的最佳配置與如下配置方案進行了比較,以便評估:

  • 預設: DBMS 初始配置
  • 調優指令碼: 一個開源調優建議工具做出的配置
  • DBA: 人類 DBA 選擇的配置
  • RDS: 將亞馬遜開發人員管理的 DBMS 的定製配置應用到相同的 EC2 例項型別。

我們在亞馬遜 EC2 競價例項上執行了所有的實驗。每個實驗執行在兩個例項上,分別是m4.large 和 m3.xlarge 型別:一個用於 OtterTune 控制器,一個用於目標 DBMS 部署。OtterTune 調優管理器和知識庫部署在本地一臺 20 核 128G 記憶體的伺服器上。

工作負載用的是 TPC-C,這是評估聯機交易系統效能的工業標準。

評估

我們給每個實驗中的資料庫 —— MySQL 和 Postgres —— 測量了延遲和吞吐量,下面的圖表顯示了結果。第一個圖表顯示了“第99百分位延遲”的數量,代表“最差情況下”完成一個事務的時長。第二個圖表顯示了吞吐量結果,以平均每秒執行的事務數來衡量。

MySQL 實驗結果

OtterTune 生成的最佳配置與調優指令碼和 RDS 的配置相比,OtterTune 讓 MySQL 的延遲下降了大約 60%,吞吐量提升了 22% 到 35%。OtterTune 還生成了一份幾乎跟 DBA 一樣好的配置。

在 TPC-C 負載下,只有幾個 MySQL 的旋鈕顯著影響效能。OtterTune 和 DBA 的配置給這幾個旋鈕設定了很好的值。RDS 表現略遜一籌,因為給一個旋鈕配置了欠佳的值。調優指令碼表現最差,因為只修改一個旋鈕。

Postgres 實驗結果

在延遲方面,相比 Postgres 預設配置,OtterTune、調優工具、DBA 和 RDS 的配置獲得了近似的提升。我們大概可以把這歸於 OLTP-Bench 客戶端和 DBMS 之間的網路開銷。吞吐量方面,Postgres 在 OtterTune 的配置下比 DBA 和調優指令碼要高 12%,比 RDS 要高 32%。

結束語

OtterTune 將尋找 DBMS 配置旋鈕的最優值這一過程自動化了。它通過重用之前的調優過程收集的訓練資料,來調優新部署的 DBMS。因為 OtterTune 不需要生成初始化資料集來訓練它的機器學習模型,調優時間得以大大減少。

下一步會怎麼樣? 為了順應的越來越流行的 DBaaS (遠端登入 DBMS 主機是不可能的),OtterTune 會很快能夠自動探查目標 DBMS 的硬體能力,而不需要遠端登入。

想了解 OtterTune 的詳細資料,請檢視我們的論文GitHub 上的程式碼。關注這個網站,我們將很快讓 OtterTune 成為一個線上調優服務。


打賞支援我翻譯更多好文章,謝謝!

打賞譯者

打賞支援我翻譯更多好文章,謝謝!

任選一種支付方式

通過機器學習來自動調優 DBMS,讓任何人都可以部署資料庫管理系統 通過機器學習來自動調優 DBMS,讓任何人都可以部署資料庫管理系統

相關文章