葛警軍,王 更,邢金芳
(機械工業第六設計研究院有限公司,河南 鄭州)
低碳社會的建設已成為全世界所有國家的共識,研究低能耗、低成本的計算系統級模型,已成為未來技術重大的挑戰,目前對于研究低能耗數據庫系統在數據中心中不但有著很大的社會意義,還有著顯著的應用價值,另外,其對數據庫領域的發展能夠起到很大的促進意義[1]。
設計能耗有效的數據庫管理系統,在大大降低系統能耗的同時要保證性能退化盡可能的少,另外對系統可靠性及擴展性也不會造成影響。在設計查詢優化器時間能耗因素加入其中,這需要設計能耗有效的數據庫管理系統時建立兩個模型:①能耗模型,將能耗模型加入到優化器中,在評估查詢計劃代價時能考慮到能耗的因素。②總代價模型,查詢計劃的總代價通過新加的性能與能耗模型能夠得出,由此對最優的查詢計劃進行選擇。在對查詢優化改進時,其總代價與能耗模型的良好建立是重點所在。因此,需對系統能耗與性能的聯系以及硬件的性能與操作特性進行了解。
在數據庫系統中,對于系統性能來講,SQL 查詢資料消耗是重點工作。將代價模型建立在優化器中,能估計給定查詢基勢。這方面有直方圖以及基于采樣的方法等很多工作。對于查詢執行時間通過混合模型來進行預測,但是混合模型使用的輸入特征均來自數據庫內部數據,對于系統層的影響沒有進行考慮。
不同于目前已有的執行時間預測模型,本篇文章主要來研究查詢執行中平均功耗的預測,而這樣選擇的目的主要是對以下兩個方面進行考慮:(1) 假如對能耗直接進行預測,其問題非常的復雜,而通過計算執行平均功耗以及機選查詢執行時間得到查詢操作的能耗[2]。因為這兩個環節都是相互獨立的,因此可以有效避免傳遞估計誤差,且可以將一個復雜問題分成簡單的兩個問題,從而便于問題的實現和討論[3]。(2) 數據中心的功耗是一個最重要的優化目標,冷卻系統的耗能隨著系統在低功耗運行時也會隨著降低。所以,需先對功耗預測模型進行建立,以此為基礎,將功耗預測模型融入到查詢計劃計算模型中,最后選擇的查詢計劃其能耗有效性最好[4]。
性能模型通過時間模型來進行表示,用來對查詢計劃的執行時間進行估計,能耗模型度量單位為焦耳,用來對執行計劃的能耗大小進行估計[5]。功耗模型的度量單位為瓦特,用來對執行計劃中的系統功耗進行估計。時間模型與功耗模型之間是相對獨立的,但對于查詢計劃實際執行時間目前已有的時間模型不能給定,因此,在實際中,不能用功耗*時間=能耗這種簡單方式來進行度量,而是要對時間與功耗的權重通過定義合理的值來進行調節,以此能耗模型才能更加的合理[6]。
有研究表明[7],不同的操作符,其功耗在相同CPU 使用率下也是不同的,其功耗最大也會有百分之六十的差異。所以,對于單個數據庫的執行功耗,不但要對內存以及CPU使用情況進行考慮,還要對數據庫的運行情況進行考慮。最終收集的數據有執行的功耗數據、系統當前運行狀態的表征數據以及操作符讀取的頁面數據等三個部分數據組成。把數據庫與系統內部表征數據在功耗模型建立中作為輸入來對功耗進行預測。
可以收集的系統信息有:系統熱設計功耗值、內存以及CPU使用率。其中系統熱設計功耗值是常量值,是系統運行的功耗上限,能夠對CUP 使用率以及內存使用率實時進行獲取,在Linux操作系統當中,對于內存及CPU 使用率可通過讀取meminfo 文件、proc 文件、stat 文件以及proc 文件的內容來進行確定。CPU所有的活動信息都包含在stat 文件當中,stat 文件中所有值從啟動系統之后一直到當前時刻,stat、proc 以及cat 執行后的內容如表1 所示。

表1 CPU 的運行信息
對文件的內容選擇兩個時刻來進行讀取,這段時間內的CPU使用率通過計算能夠得到,即
從meminfo 文件中提取內存總量以及內存使用量兩個數據來計算內存使用量,其如公式(2)所示。
對于數據庫信息,在數據庫系統內通過分類方式列出了可獲取的參數與含義,如表2 與表3 所示。

表2 所有物理操作符的共同特征

表3 基于特定操作符的特征
需要對內核中的relation.h、plannodes.h、explain.c、createplan.c 以及costsize.c 等文件進行修改才能在PostgreSQL 中具體實現。結構體plan 通過對relation.h與plannodes.h 文件進行修改,path 定義添加相應類型字段來對信息進行記錄,可通過explain+SQL查詢方式在PostgreSQL數據庫中顯示SQL查詢執行計劃樹。
需有相應負載才能進行數據采集工作,在查詢負載運行中收集數據。因為TPC-H 由一系列操作符組成執行樹,是復查查詢,在采集數據中,會遇到下面兩個問題:
(1) 在測試平臺中,雖然能夠實時的監按測試機的運行功耗,但因物理操作符不確定的執行時序,對每個操作的執行時段很難確定,所以對其運行功耗也很難確定。(2) 系統信息采集對于單個操作符有著較大的誤差,這是因為對meminfo文件、proc 文件等段時間內頻繁的讀取導致的。
由此,本文對于數據的收集提出簡單負載原則通過查詢負載進行有效的收集,另外對操作符真實功耗通過數據有效的進行反映。在運行負載設計時,盡可能的使不同查詢不存在操作符交集、單個查詢涉及較少操作符、盡可能的整個負載包括所有類型操作符。
根據訓練數據集,對操作符層功耗模型采取回歸分析法來進行建立,對于單個物理操作符采取兩個特征數據來得到預測功能模型:(1) 在DBMS 內部,對執行時的元組數目、選擇讀以及讀取頁面數目等信息進行采集。(2) 目前CPU使用率,單個操作符預測功耗為:
對于F 通過訓練數據集來進行回歸分析,計算復雜度在實際使用中要進行考慮,總誤差率值為f,誤差率
作為目標函數。
下一步,對于查詢計劃平均功耗由單個物理操作預測功耗來進行估計,由物理操作符構成的執行計劃樹能夠作為任意一個查詢,一個合法的執行計劃樹都是由每組操作符有序執行的結果。tO在傳統代價估計中表示操作符時間估計,TQ表示執行計劃時間估計,如公式(5)所示。
總時間可通過時間累加表示,但是功耗累加沒有任何意義。本篇文章來加權累加每一個操作符的功耗,而不是對操作符直接進行疊加,其得到的查詢功耗,如公式(6)與公式(7)所示。
在上述公式中,Tmp 表示中間變量,計算操作符時間和功耗的乘積。
對于TPC-H 基準在兩種不同系統下進行測試,在生成的數據集中對TPC-H 測試查詢語句分別運行,對于查詢執行平均功耗通過能耗測試平臺進行計算統計,以此對模型精度進行計算。
對競爭運行環境與靜態運行環境下的性能進行測試,靜態因依次單個執行測試查詢,獨占系統,競爭不是獨占系統資源,存在其他應用,通過Web 服務程序來進行模擬。
時間性能隨著α 的增加而變差,且平均功耗降低,符合預期。查詢優化器在功耗與性能間的均衡通過α能夠有效的進行調節,如果α 的值設置的較大,那么就會偏向功耗低的執行計劃,由此會降低執行的時間性能,實驗中能夠得出,能耗有效性在α 值為0 到0.30 時比較好。
TPC-C是聯機事務處理的基準測試,能耗有效查詢優化策略通過使用TPC-C 來對聯機事務處理性能進行測試,實驗中定義能耗有效性為:
通過測試結果能夠得出:對于能耗通過將功耗代價添加到查詢優化器中而能夠進行優化,但是不能只對功耗進行優化,而對性能選擇忽視。
本篇文章在優化器中將能耗代價引入其中,并對功耗預測提出回歸分析操作符方法。此外,查詢代價模型在引入性能退化調節因子后能夠兼顧性能與能耗,對于能耗有效查詢優化器在在PostgreSQL上進行實現。能耗有效查詢優化技術的可行性以及實用性通過TPC-C 和TPC-H 結果得到了驗證。
在本次實驗中,對于能耗與性能測試根據開源的PostgreSQL 進行開展,目前商用DBMS 采用了類似PostgreSQL 的查詢優化技術。所以本次結果具有普適應,能在其他關系型數據庫中進行推廣應用。
未來對于聚集、連接等復雜查詢操作符的功耗代價估計方法進行研究,針對性的提出能耗有效查詢優化的方法。另外,目前通常以服務器集群的方式來對數據中心進行部署,數據中心在能耗方面不但會受服務器節點的影響,其也會因集群中的數據遷移與分布式調度等情況而受到影響,對于以后的工作,能耗有效的解決方案可通過數據中心的任務調度以及分布式查詢處理等進行研究。