如何用一杯茶的功夫調優(yōu)日志搜索引擎性能,看這一篇就夠了~
優(yōu)采云 發(fā)布時(shí)間: 2022-05-14 19:02如何用一杯茶的功夫調優(yōu)日志搜索引擎性能,看這一篇就夠了~
前言
Beaver 是由日志易自主研發(fā)、安全可控的搜索引擎,由 Master、Broker 和 Datanode 三部分組成,已廣泛應用于存儲和分析大型分布式系統生成的日志。Beaver 擁有大量與性能相關(guān)的配置項,由于手動(dòng)配置費時(shí)費力,并且有時(shí)需要修 改相關(guān)配置以適配特定環(huán)境,所以自動(dòng)調整配置參數優(yōu)化性能是當前迫切需要解 決的問(wèn)題。
一、背景調研
目前業(yè)界有許多自動(dòng)調參的項目和算法實(shí)現,例如 CMU 開(kāi)源的關(guān)系型數據庫自動(dòng)調參工具 OtterTune[1]、PingCAP 仿作的 TiKV 自動(dòng)調參工具[2]等,都為 我們提供了大量的論文以及開(kāi)源算法代碼。
1、OtterTune
數據庫有很多參數,比如 MySQL 有幾百個(gè)參數,Oracle 有上千個(gè)參數。這些參數控制著(zhù)數據庫的方方面面,很大程度上影響了如緩存容量和檢查點(diǎn)頻次等數據庫性能。
對于不同的硬件配置,不同的工作負載,對應的最優(yōu)參數文件都是不同的, 這些復雜性令數據庫調優(yōu)變得更加困難。DBA(Database Administrator,即數據庫管理員)不能簡(jiǎn)單地重復使用之前調好的參數文件,他們需要花大量時(shí)間根據經(jīng)驗來(lái)調優(yōu)數據庫的參數,而公司則需要花大價(jià)錢(qián)來(lái)雇傭資深 DBA。為解決上述問(wèn)題,卡內基梅隆大學(xué)數據庫小組的教授、學(xué)生和研究人員開(kāi)發(fā)了一個(gè)數據庫自動(dòng)調參工具 OtterTune,它能利用機器學(xué)習對數據庫的參數文件進(jìn)行自動(dòng)化調優(yōu),利用已有的數據訓練機器學(xué)習模型,進(jìn)而實(shí)現自動(dòng)化地推薦最優(yōu)參數。它能很好地幫助 DBA 進(jìn)行數據庫調優(yōu),將 DBA 從復雜繁瑣的調參工 作中解放出來(lái)。OtterTune 的目的是為了幫助 DBA,讓數據庫部署和調優(yōu)更加容易,用機器來(lái)代替數據庫調參這個(gè)冗繁但又很重要的工作,讓技術(shù)人員甚至不需要專(zhuān)業(yè)知識也能順利完成。OtterTune 分為客戶(hù)端和服務(wù)端,目標數據庫是用戶(hù)需要調優(yōu)參數的數據庫:客戶(hù)端接收到推薦的配置文件后,配置到目標數據庫上,并測量其性能。以上步驟可重復進(jìn)行,直到用戶(hù)對其推薦的配置文件滿(mǎn)意為止。2、AutoTiKVAutoTikv 是一個(gè)用于對 TiKV 數據庫進(jìn)行自動(dòng)調優(yōu)的工具。它是根據 SIGMOD2017 年發(fā)表的一篇論文所設計[3],能夠使用機器學(xué)習模型對數據庫參數進(jìn)行自動(dòng)調優(yōu)。AutoTiKV 吸取了 OtterTune 的設計理念,并簡(jiǎn)化了相關(guān)結構。設計的調優(yōu)過(guò)程如下:
圖一:整個(gè)過(guò)程會(huì )循環(huán)跑 200 個(gè) round(用戶(hù)可自定義),或者定義為直到結果收斂為止。3、ML 模型AutoTikv 使用了和 OtterTune 一樣的高斯過(guò)程回歸(Gaussian Process Regression,以下簡(jiǎn)稱(chēng) GP)來(lái)推薦新的 knob,它是基于高斯分布的一種非參數模型。
在沒(méi)有利用機器學(xué)習模型對參數文件的效果進(jìn)行預測前,OtterTune 使用的是隨機采樣的方式來(lái)收集初始數據。
當有足夠的數據(X,Y)時(shí),OtterTune 訓練機器學(xué)習模型進(jìn)行回歸,即估計出函數 f:X→Y,表示對于參數文件 X,用 f(X)來(lái)估計數據庫延遲 Y 的值。如此,問(wèn)題則變?yōu)閷ふ液线m的 X,使 f(X)的值盡量小。這樣在 f 上面做梯度下降即可找 出合適的 X[4]。
如圖二所示,橫坐標是兩個(gè)參數:緩存大小和日志文件大小,縱坐標是數據庫延遲(越低越好)。
圖二:OtterTune 高斯過(guò)程回歸模型
OtterTune 用高斯過(guò)程回歸模型估計出了 f,即給定這兩個(gè)參數值,估計出對應的數據庫延遲。接著(zhù)用梯度下降找到最合適的參數值,使延遲盡可能低。
高斯過(guò)程回歸的好處:
和神經(jīng)網(wǎng)絡(luò )之類(lèi)的方法相比,GP 屬于無(wú)參數模型,算法計算量相對較低,而且在訓練樣本很少的情況下,GP 表現比神經(jīng)網(wǎng)絡(luò )算法( Neural Network ) 更好。
它能估計樣本的分布情況,即 X 的均值 m(X) 和標準差 s(X)。若 X 周?chē)臄祿欢?,則它被估計出的標準差 s(X) 會(huì )偏大(表示這個(gè)樣本 X 和其他數據點(diǎn)的差異大)。直觀(guān)的理解是若數據不多,則不確定性會(huì )大,體 現在標準差偏大;反之,數據足夠多時(shí),不確定性減少,標準差會(huì )偏小。這個(gè)特性后面會(huì )用到。
但 GP 本身其實(shí)只能估計樣本的分布,為了得到最終的預測值,我們需要 把它應用到貝葉斯優(yōu)化(Bayesian Optimization)中[5]。
貝葉斯優(yōu)化算法大致可分為兩步:通過(guò) GP 估計出函數的分布情況;通過(guò)采集函數(Acquisition Function)指導下一步的采樣(也就是給出推薦值)。
采集函數(Acquisition Function)的特性是在尋找新的推薦值的時(shí)候,能夠進(jìn)行平衡探索(Exploration)和利用(Exploitation)。
在推薦的過(guò)程中,需要平衡上述兩種指標。Exploitation 過(guò)多會(huì )導致結果陷入局部最優(yōu)值(即重復推薦目前已知最好的點(diǎn),但可能還有更好的點(diǎn)沒(méi)被發(fā)現), 而 Exploration 過(guò)多又會(huì )導致搜索效率太低(即一直在探索新區域,而沒(méi)有對當前比較好的區域進(jìn)行深入嘗試)。而平衡二者的核心思想,是當數據足夠多時(shí), 利用現有的數據推薦;當缺少數據時(shí),在點(diǎn)最少的區域進(jìn)行探索,探索最未知的 區域能夠提供最大的信息量。貝葉斯優(yōu)化的第二步就可以幫我們實(shí)現這一思想。前面提到,GP 可以幫我們估計 X 的均值 m(X) 和標準差 s(X),其中均值 m(X) 可以作為 Exploitation 的表征值,而標準差 s(X) 可以作為 Exploration 的表征值,這樣就 可以用貝葉斯優(yōu)化方法來(lái)求解了。使用置信區間上界(Upper Confidence Bound)作為采集函數。假設我們需要找 X 使 Y 值盡可能大,則 U(X) = m(X) + k*s(X),其中 k > 0 是可調的系數,我們只要找 X 使 U(X) 盡可能大即可。注意,其中系數 k 影響著(zhù)探索和利用的比例,即 k 越大,越鼓勵探索新的區域。
在具體實(shí)現中,一開(kāi)始隨機生成若干個(gè) candidate knobs,然后用上述模型計算出它們的 U(X),找出 U(X) 最大的那一個(gè)作為本次推薦的結果。二、可行性分析目前所有開(kāi)源的自動(dòng)調參工具實(shí)現原理基本上都是通過(guò)機器學(xué)習算法推薦 配置參數,應用至數據庫或者其他引擎上,在不同的工作負載模式下,不斷收集 metric 信息,豐富訓練模型,直至推薦出最優(yōu)的配置,以此替代頻繁的手動(dòng)修改 配置工作。由調研可以發(fā)現,OtterTune 是通用模型框架,在業(yè)界許多場(chǎng)景都能應用, 不僅能調優(yōu)數據庫的參數,還能夠調優(yōu)操作系統內核的參數,即只要能獲取指標 信息,大部分軟件都可以用此模型進(jìn)行調優(yōu)。同時(shí)可以借鑒 AutoTiKV 的測試代碼,將目標 DB 替換為 Beaver_datanode, 通過(guò)修改不同的配置,測試 baimi 數據集,收集 search 的性能數據,經(jīng)過(guò)模型訓 練后不斷推薦最優(yōu)配置。baimi 數據集,即 Apache 訪(fǎng)問(wèn)日志,總日志行數 7078124,日志文件原始大小 2374265761 Byte,測試 Beaver 和 ES 的搜索性能對比中用到的數據集。
AutoTiKV 代碼分析:
pipeline.py
自動(dòng)調參腳本入口,定義執行 round 數,自動(dòng)推薦參數配置,修改配置文件 并重啟相關(guān) DB,收集 metric 數據訓練算法模型,以文件形式持久化保存對象。
settings.py
腳本參數配置,需要測試的 knobs、metrics 及 workload,數據庫連接配置。需要優(yōu)化的 metric(僅支持優(yōu)化一項目標 metric)、ansible 和 deploy 目錄。
controller.py
knob 配置和 metric 獲取相關(guān)函數,每一個(gè)需要修改的參數都需要在 knob_set 中定義,聲明參數類(lèi)型和取值范圍,修改配置文件和重啟數據庫函數等。另外包 括一些工作負載相關(guān)的 workload 函數。
datamodel.py
初始化數據設置,存放數據模型,每次測試的配置參數和獲取到的指標數據 都會(huì )存放在此模型中。gpmodel.py
調用高斯過(guò)程回歸類(lèi)算法,傳遞并訓練數據模型,根據算法推薦返回最佳配 置參數,用于下輪測試。注意,前十輪為隨機生成的 knob。gpclass.py
即高斯過(guò)程回歸算法。showres.py
展示過(guò)往測試結果,將持久化保存的對象文件反序列化,調用 datamodel.py
函數中 GPDataSet 類(lèi)輸出測試結果。三、具體實(shí)現本著(zhù)不重復造輪子的原則,本次測試決定使用 AutoTiKV 的算法代碼,并修 改其中關(guān)于數據庫的代碼,使其適用于 Beaver_datanode。首先,TiKV 數據庫使用的配置文件是 yaml 格式,而 Beaver 使用的是 flags 參數的形式(—max_concurrency_tasks_per_search=4),代碼中使用的 ruamel.yaml 庫文件并不適用于 Beaver。因此,對 controller.py 中 set_tikvyml 函數進(jìn)行修改, 以“=”為分隔符,讀取舊配置文件并將參數以鍵值對形式寫(xiě)入字典中,對需要 修改的配置項進(jìn)行替換,最后把修改過(guò)后的配置參數寫(xiě)入到新配置文件中。需要修改的配置參數應在 settings.py 中提前聲明,更新 target_knob_set 列表 中的參數,新增 wl_metrics 中 avgsearch 列表,并設置期望的 metric。在 controller.py 中補充參數的類(lèi)型和取值范圍,配置好 knob_set 和 metric_set。修改 metric 數據 獲取函數,其中 read_search_latency()函數是基于已經(jīng)索引好的 baimi 數據集,測 試某個(gè)場(chǎng)景的 search 性能。參考了 Esrally 的性能壓測代碼[7],調用 Beaver_broker 的 API 接口,通過(guò)傳遞 pb 格式的搜索語(yǔ)句,來(lái)獲取不同場(chǎng)景下的 latnecy。本次自動(dòng)調參測試中,使 用的搜索場(chǎng)景是從數據集中獲取apache.resp_len字段的平均值,可以根據自己的 實(shí)際環(huán)境自定義場(chǎng)景。因為每次得到的性能數據可能受到各種因素影響,或產(chǎn)生較大誤差,為了降低誤差值,搜索請求預熱 20 次,壓測 100 次,并計算前 90th 的平均值作為最終的 metric 數據。
算出它們的 U(X),找出 U(X) 最大的那一個(gè)作為本次推薦的結果。
settings.py 中需要修改的配置:
#?beaver集群的broker地址和端口,主要用來(lái)測試搜索性能beaver_broker_ip="172.21.16.16"beaver_broker_port="50061"# 測試搜索性能需要的索引index_forsearch="ops-http_baimi-20210507"# pb類(lèi)型搜索語(yǔ)句,求apache.resp_len字段的平均值pb_forsearch='search_info {query {type: kQueryMatchAll}fetch_source {fetch: true}size {value: 0} aggregations { aggs { type: kAggAvg name: "av(apache.resp_len)" body { field: "apache.resp_len__l__" } } } query_time_range {time_range {min: 0 max: 1620374828405}}}'# 不同工作負載模式下相關(guān)的指標,可以隨意命名,workloadwl_metrics={ "avgsearch": ["search_latency","compaction_mem","compaction_cpu"],}# workload to be loadloadtype = "avgsearch"# workload to be runwltype = "avgsearch"# 需要優(yōu)化的目標指標target_metric_name="search_latency"# 待調整的配置項target_knob_set=['--enable_query_cache', # 啟用query cache '--max_concurrency_tasks_per_search', # 每個(gè)Search允許同時(shí)執行的數目 '--max_per_search_ram', # 單個(gè)Search最大占用的內存 '--max_per_sub_search_ram', # 單個(gè)SubSearch最大占用的內存 '--block_ids_per_batch'] # 每個(gè)SubSearch的Block數目
以下是 knob 和 metric 在 controller.py 中的聲明樣板:
<br />knob_set=\{"--max_concurrency_tasks_per_search": # 配置項 { "changebyyml": True, # True表示通過(guò)修改配置文件來(lái)調節 "set_func": None, # 若changebyyml==False,則在此指定修改參數的函數名(在controller.py中定義函數),一般是不需要重啟beaver的配置 "minval": 0, # if type==int, indicate min possible value "maxval": 0, # if type==int, indicate max possible value "enumval": [4, 6, 8], # if type==enum, list all valid values "type": "enum", # int / enum "default": 0 # default value }}metric_set=\ {"search_latency": { "read_func": read_search_latency, # 聲明查看該指標的函數(函數也定義在controller.py里) "lessisbetter": 1, # whether less value of this metric is better(1: yes) "calc": "ins", # ins表示該參數的值就是benchmark之后查看的結果。inc表示該參數是incremental的,需要把benchmark之后和之前的值相減作為結果。 },}
Beaver 重啟操作比較直接,使用 os.popen 管道命令直接在服務(wù)器上執行 kill 命令后更新配置文件重新啟動(dòng),具體操作在 controller.py 文件的 restart_beaver_datanode()函數中。在本次測試中,腳本直接運行在 Beaver 所運行 的服務(wù)器中,首先需要在 settings.py 文件中聲明 Beaver_datanode 的啟動(dòng)命令和 各項配置文件路徑,指定配置文件臨時(shí)存放路徑。使用“ps -ef|grep beaver_datanode”即可查看 Beaver_datanode 的啟動(dòng)命令。具體配置示例如下:
autotestdir="/tmp/auto_beaver_datanode"beaver_datanode_file="/opt/rizhiyi/parcels/beaver_datanode-3.7.0.0/bin/beaver_datanode"gflagsfile="/run/rizhiyi_manager_agent/process/2002-beaver_datanode/config/beaver_datanode.gflags"config_path="/run/rizhiyi_manager_agent/process/2002-beaver_datanode/config/beaver_datanode.pb"log_dir="/data/rizhiyi/logs/beaver_datanode"
四、測試結果knobs
此次測試主要測試了以下配置項:
metrics
我們選擇了如下幾個(gè) metrics 作為優(yōu)化指標。
注意:knobs 和 metrics 均在 contorller.py 文件中定義
腳本具體使用步驟
安裝 python3.6
$ tar -xf Python-3.6.12.tgz -C /tmp
# 編譯前檢查系統 openssl 版本是否為 1.0.2k 以上版本,并安裝所需依賴(lài)包,否 則編譯 Python 時(shí)會(huì )報錯。$ yum install -y openssl* bzip2* xz-devel zlib-devel libffi-devel gcc gcc-c++ sqlite sqlite-devel$ cd /tmp/Python-3.6.12/$ ./configure# 編譯無(wú)報錯后可以執行 make 安裝,默認會(huì )安裝到/usr/local/lib/python3.6# 使用該命令參數可以安裝到指定位置: ./configure --prefix=/xxx$ make && make install
2. 安裝虛擬環(huán)境,切換到 python3.6 環(huán)境,下載自動(dòng)化調參工具,并使用 pip 安裝相關(guān)依賴(lài)包
$ python3.6 -m venv autoenv$ source autoenv/bin/activate(autoenv)$ git clone https://github.com/woxiang-H/auto-beaver.git (autoenv)$ cd auto-beaver(autoenv)$ pip install -r requirements.txt
3. 按照之前具體實(shí)現中提到的需要修改的配置,修改 auto-beaver 下 settings.py 文件。
4. 調整好 settings.py 之后,執行 python pipeline.py
等待結果收斂,查看推薦配置
################## data ################## ------------------------------previous:------------------------------ rowlabels, finish_time, knobs, metrics1 , 2021-05-11 16:41:02 , [0. 1. 0. 0. 1.] , [124.71111111 1.4 2 , 2021-05-11 16:43:41 , [0. 1. 0. 0. 0.] , [127.38888889 1.4 3 , 2021-05-11 16:46:10 , [1. 1. 0. 0. 0.] , [127.54444444 1.4 4 , 2021-05-11 16:48:48 , [0. 1. 0. 0. 2.] , [126.81111111 1.4 5 , 2021-05-11 16:51:27 , [1. 1. 0. 0. 2.] , [126.23333333 1.4 6 , 2021-05-11 16:54:06 , [0. 1. 0. 0. 2.] , [124.63333333 1.4 7 , 2021-05-11 16:56:35 , [1. 2. 0. 0. 1.] , [125.13333333 1.4 8 , 2021-05-11 16:59:14 , [1. 0. 0. 0. 1.] , [125.5 1.4 31.8]9 , 2021-05-11 17:01:53 , [1. 0. 0. 0. 2.] , [131.18888889 1.4 31.9 ]10 , 2021-05-11 17:04:31 , [0. 2. 0. 0. 1.] , [124.22222222 1.4 31.5 ]11 , 2021-05-11 17:07:53 , [0. 2. 0. 0. 2.] , [128.48888889 1.4 31.4 ]12 , 2021-05-11 17:11:14 , [0. 2. 0. 0. 1.] , [123.74444444 1.4 31.9 ]13 , 2021-05-11 17:14:35 , [0. 1. 0. 0. 1.] , [123.34444444 1.4 31.1 ]14 , 2021-05-11 17:17:56 , [0. 2. 0. 0. 1.] , [127.08888889 1.4 31.5 ]15 , 2021-05-11 17:21:17 , [0. 0. 0. 0. 1.] , [124.66666667 1.4 31.8 ]16 , 2021-05-11 17:24:38 , [0. 1. 0. 0. 1.] , [123.34444444 1.4 31.2 ]17 , 2021-05-11 17:27:59 , [0. 2. 0. 0. 1.] , [126.15555556 1.4 31.2 ]18 , 2021-05-11 17:31:21 , [0. 1. 0. 0. 1.] , [126.26666667 1.4 31.6 ]19 , 2021-05-11 17:34:41 , [0. 0. 0. 0. 1.] , [123.67777778 1.4 31.3 ]20 , 2021-05-11 17:38:04 , [0. 1. 0. 0. 1.] , [127.13333333 1.4 31.5 ]21 , 2021-05-11 17:41:15 , [0. 0. 0. 0. 1.] , [126.35555556 1.4 33.1 ]22 , 2021-05-11 17:44:36 , [0. 1. 0. 0. 1.] , [124.56666667 1.4 31.5 ]23 , 2021-05-11 17:47:57 , [0. 0. 0. 0. 1.] , [124.36666667 1.4 31.2 ]24 , 2021-05-11 17:51:19 , [0. 1. 0. 0. 1.] , [129.04444444 1.4 31.4 ]25 , 2021-05-11 17:54:39 , [0. 0. 0. 0. 1.] , [122.94444444 1.4 31.2 ]26 , 2021-05-11 17:58:01 , [0. 1. 0. 0. 1.] , [125.03333333 1.4 31.1 ]27 , 2021-05-11 18:01:22 , [0. 0. 0. 0. 1.] , [128.91111111 1.4 31.7 ]28 , 2021-05-11 18:04:42 , [0. 1. 0. 0. 1.] , [125.67777778 1.4 31.4 ] 29 , 2021-05-11 18:08:04 , [0. 0. 0. 0. 1.] , [124.78888889 1.4 31.2 ]30 , 2021-05-11 18:11:15 , [1. 1. 0. 0. 1.] , [125.37777778 1.4 32.7 ]31 , 2021-05-11 18:14:36 , [0. 0. 0. 0. 1.] , [126.62222222 1.4 31.3 ]32 , 2021-05-11 18:17:57 , [0. 2. 0. 0. 1.] , [123.52222222 1.4 31.4 ]33 , 2021-05-11 18:21:19 , [0. 0. 0. 0. 1.] , [125.54444444 1.4 31.3 ]34 , 2021-05-11 18:24:31 , [0. 2. 0. 0. 1.] , [126.58888889 1.4 32.9 ]35 , 2021-05-11 18:27:52 , [0. 0. 0. 0. 1.] , [123.44444444 1.4 31.4 ]36 , 2021-05-11 18:31:12 , [0. 2. 0. 0. 1.] , [125.65555556 1.4 31.4 ]37 , 2021-05-11 18:34:34 , [0. 0. 0. 0. 1.] , [125.83333333 1.4 31.5 ]38 , 2021-05-11 18:37:45 , [1. 1. 0. 0. 1.] , [128.74444444 1.4 32.8 ] 39 , 2021-05-11 18:41:06 , [0. 0. 0. 0. 1.] , [123.74444444 1.4 31.4 ] 40 , 2021-05-11 18:44:28 , [1. 2. 0. 0. 1.] , [127.13333333 1.4 31.7 ] 41 , 2021-05-11 18:47:49 , [0. 0. 0. 0. 1.] , [127.9 1.4 31.4]42 , 2021-05-11 18:51:00 , [0. 1. 0. 0. 1.] , [124.71111111 1.4 32.9 ] 43 , 2021-05-11 18:54:21 , [0. 0. 0. 0. 1.] , [125.51111111 1.4 31.1 ] 44 , 2021-05-11 18:57:42 , [0. 1. 0. 0. 1.] , [123.42222222 1.4 31.4 ] 45 , 2021-05-11 19:01:03 , [0. 0. 0. 0. 1.] , [124.04444444 1.4 31.4 ] 46 , 2021-05-11 19:04:24 , [0. 1. 0. 0. 1.] , [124.28888889 1.4 31.2 ] 47 , 2021-05-11 19:07:35 , [0. 0. 0. 0. 1.] , [125.75555556 1.4 32.7 ] 48 , 2021-05-11 19:10:57 , [0. 1. 0. 0. 1.] , [127.17777778 1.4 31.3 ] 49 , 2021-05-11 19:14:17 , [0. 0. 0. 0. 1.] , [123.52222222 1.4 31.5 ] 50 , 2021-05-11 19:17:38 , [0. 1. 0. 0. 1.] , [125.33333333 1.4 31.5 ] 51 , 2021-05-11 19:20:58 , [0. 0. 0. 0. 1.] , [126.82222222 1.4 31.3 ] 52 , 2021-05-11 19:24:19 , [0. 1. 0. 0. 1.] , [124.15555556 1.4 31.4 ] 53 , 2021-05-11 19:27:40 , [0. 0. 0. 0. 1.] , [126.34444444 1.4 31.5 ] 54 , 2021-05-11 19:31:01 , [0. 1. 0. 0. 1.] , [124.68888889 1.4 31.4 ] 55 , 2021-05-11 19:34:23 , [0. 0. 0. 0. 0.] , [125.5 1.4 31.4]56 , 2021-05-11 19:37:44 , [0. 1. 0. 0. 1.] , [125.61111111 1.4 31.4 ] 57 , 2021-05-11 19:40:55 , [0. 0. 0. 0. 0.] , [125.16666667 1.4 32.8 ] 58 , 2021-05-11 19:44:16 , [0. 1. 0. 0. 1.] , [125.06666667 1.4 31.5 ] 59 , 2021-05-11 19:47:37 , [0. 0. 0. 0. 0.] , [125.54444444 1.4 31.2 ] 60 , 2021-05-11 19:50:58 , [0. 1. 0. 0. 1.] , [125.55555556 1.4 31.4 ] 61 , 2021-05-11 19:54:20 , [0. 0. 0. 0. 0.] , [128.92222222 1.4 31.5 ] 62 , 2021-05-11 19:57:31 , [0. 1. 0. 0. 1.] , [125.9 1.4 32.9] ------------------------------new:------------------------------knobs: [[0. 0. 0. 0. 0]]metrics: [[124.1 1.4 31.5]]rowlabels: [1]timestamp: 2021-05-11 20:00:52------------------------------TARGET:------------------------------knob: ['--enable_query_cache' '--max_concurrency_tasks_per_search''--max_per_search_ram' '--max_per_sub_search_ram' '--block_ids_per_batch'] metric: search_latencymetric_lessisbetter: 1------------------------------------------------------------num of knobs == 5knobs: ['--enable_query_cache' '--max_concurrency_tasks_per_search''--max_per_search_ram' '--max_per_sub_search_ram' '--block_ids_per_batch'] num of metrics == 3metrics: ['search_latency' 'compaction_mem' 'compaction_cpu'] ------------------------------------------------------------
可以看到最佳推薦配置為[0. 0. 0. 0. 0.]和0. 1. 0. 0. 1.,具體配置參數如下
set_beaver_datanode_gflags:: --enable_query_cache falseset_beaver_datanode_gflags:: --max_concurrency_tasks_per_search 4set_beaver_datanode_gflags:: --max_per_search_ram 198mset_beaver_datanode_gflags:: --max_per_sub_search_ram 99mset_beaver_datanode_gflags:: --block_ids_per_batch 16
或者
set_beaver_datanode_gflags::??--enable_query_cache?falseset_beaver_datanode_gflags:: --max_concurrency_tasks_per_search 6set_beaver_datanode_gflags:: --max_per_search_ram 198mset_beaver_datanode_gflags:: --max_per_sub_search_ram 99mset_beaver_datanode_gflags:: --block_ids_per_batch 18
結果顯示,適當提高 search 并發(fā)數,或提高 SubSearch 的 block 數會(huì )優(yōu)化 search 性能。五、存在的問(wèn)題通過(guò)修改相關(guān)代碼,目前自動(dòng)調參工具能正常運行,但依然存在不足。本次 測試方案利用事前存儲好的索引 baimi 數據集,僅測試影響 search 性能的參數, 因此可修改的配置項也相對較少。雖然舍棄了 AutoTiKV 的 workload,但代碼依 然保留此功能,待后續有針對 Beaver 的工作負載方案之后,再添加相關(guān) workload。此外 Beaver_datanode 的重啟方式也并不優(yōu)雅,有待提升。后續可優(yōu)化:增加不同的 workload 模式,測試 index 性能和 search 性能(需要 Beaver 支持新的 index 方式),同時(shí)測試 index 相關(guān)的配置參數。優(yōu)雅的重啟 Beaver_datanode。目前重啟等待 Beaver_datanode 可用的 wait 時(shí)間為 200s,在實(shí)際運行的 Beaver_datanode 中,索引恢復時(shí)間相對較長(cháng),需根據不同環(huán)境靈活變化。指標數據獲取的準確度,會(huì )受到網(wǎng)絡(luò )等因素的影響,有一定的波動(dòng)。[參考文獻]
[1]OtterTune.
[2]AutoTiKV.
[3]Automatic Database Management System Tuning Through Large-scale Machine Learning.~ggordon/van-aken-etal-parameters.pdf
[4]
[5]
[6]
[7]Esrally.
拓展內容
精彩還在繼續…2021年9月3日-4日,DevOps 國際峰會(huì ) 2021 北京站,網(wǎng)易敏捷教練、于旭東為您分享“DevOps基礎設施之環(huán)境管理,網(wǎng)易云音樂(lè )環(huán)境管理效率提升實(shí)踐”,千萬(wàn)不要錯過(guò)~
近期好文:
“高效運維”公眾號誠邀廣大技術(shù)人員投稿,







