葛警軍,王 更,邢金芳
(機(jī)械工業(yè)第六設(shè)計(jì)研究院有限公司,河南 鄭州)
低碳社會(huì)的建設(shè)已成為全世界所有國(guó)家的共識(shí),研究低能耗、低成本的計(jì)算系統(tǒng)級(jí)模型,已成為未來技術(shù)重大的挑戰(zhàn),目前對(duì)于研究低能耗數(shù)據(jù)庫(kù)系統(tǒng)在數(shù)據(jù)中心中不但有著很大的社會(huì)意義,還有著顯著的應(yīng)用價(jià)值,另外,其對(duì)數(shù)據(jù)庫(kù)領(lǐng)域的發(fā)展能夠起到很大的促進(jìn)意義[1]。
設(shè)計(jì)能耗有效的數(shù)據(jù)庫(kù)管理系統(tǒng),在大大降低系統(tǒng)能耗的同時(shí)要保證性能退化盡可能的少,另外對(duì)系統(tǒng)可靠性及擴(kuò)展性也不會(huì)造成影響。在設(shè)計(jì)查詢優(yōu)化器時(shí)間能耗因素加入其中,這需要設(shè)計(jì)能耗有效的數(shù)據(jù)庫(kù)管理系統(tǒng)時(shí)建立兩個(gè)模型:①能耗模型,將能耗模型加入到優(yōu)化器中,在評(píng)估查詢計(jì)劃代價(jià)時(shí)能考慮到能耗的因素。②總代價(jià)模型,查詢計(jì)劃的總代價(jià)通過新加的性能與能耗模型能夠得出,由此對(duì)最優(yōu)的查詢計(jì)劃進(jìn)行選擇。在對(duì)查詢優(yōu)化改進(jìn)時(shí),其總代價(jià)與能耗模型的良好建立是重點(diǎn)所在。因此,需對(duì)系統(tǒng)能耗與性能的聯(lián)系以及硬件的性能與操作特性進(jìn)行了解。
在數(shù)據(jù)庫(kù)系統(tǒng)中,對(duì)于系統(tǒng)性能來講,SQL 查詢資料消耗是重點(diǎn)工作。將代價(jià)模型建立在優(yōu)化器中,能估計(jì)給定查詢基勢(shì)。這方面有直方圖以及基于采樣的方法等很多工作。對(duì)于查詢執(zhí)行時(shí)間通過混合模型來進(jìn)行預(yù)測(cè),但是混合模型使用的輸入特征均來自數(shù)據(jù)庫(kù)內(nèi)部數(shù)據(jù),對(duì)于系統(tǒng)層的影響沒有進(jìn)行考慮。
不同于目前已有的執(zhí)行時(shí)間預(yù)測(cè)模型,本篇文章主要來研究查詢執(zhí)行中平均功耗的預(yù)測(cè),而這樣選擇的目的主要是對(duì)以下兩個(gè)方面進(jìn)行考慮:(1) 假如對(duì)能耗直接進(jìn)行預(yù)測(cè),其問題非常的復(fù)雜,而通過計(jì)算執(zhí)行平均功耗以及機(jī)選查詢執(zhí)行時(shí)間得到查詢操作的能耗[2]。因?yàn)檫@兩個(gè)環(huán)節(jié)都是相互獨(dú)立的,因此可以有效避免傳遞估計(jì)誤差,且可以將一個(gè)復(fù)雜問題分成簡(jiǎn)單的兩個(gè)問題,從而便于問題的實(shí)現(xiàn)和討論[3]。(2) 數(shù)據(jù)中心的功耗是一個(gè)最重要的優(yōu)化目標(biāo),冷卻系統(tǒng)的耗能隨著系統(tǒng)在低功耗運(yùn)行時(shí)也會(huì)隨著降低。所以,需先對(duì)功耗預(yù)測(cè)模型進(jìn)行建立,以此為基礎(chǔ),將功耗預(yù)測(cè)模型融入到查詢計(jì)劃計(jì)算模型中,最后選擇的查詢計(jì)劃其能耗有效性最好[4]。
性能模型通過時(shí)間模型來進(jìn)行表示,用來對(duì)查詢計(jì)劃的執(zhí)行時(shí)間進(jìn)行估計(jì),能耗模型度量單位為焦耳,用來對(duì)執(zhí)行計(jì)劃的能耗大小進(jìn)行估計(jì)[5]。功耗模型的度量單位為瓦特,用來對(duì)執(zhí)行計(jì)劃中的系統(tǒng)功耗進(jìn)行估計(jì)。時(shí)間模型與功耗模型之間是相對(duì)獨(dú)立的,但對(duì)于查詢計(jì)劃實(shí)際執(zhí)行時(shí)間目前已有的時(shí)間模型不能給定,因此,在實(shí)際中,不能用功耗*時(shí)間=能耗這種簡(jiǎn)單方式來進(jìn)行度量,而是要對(duì)時(shí)間與功耗的權(quán)重通過定義合理的值來進(jìn)行調(diào)節(jié),以此能耗模型才能更加的合理[6]。
有研究表明[7],不同的操作符,其功耗在相同CPU 使用率下也是不同的,其功耗最大也會(huì)有百分之六十的差異。所以,對(duì)于單個(gè)數(shù)據(jù)庫(kù)的執(zhí)行功耗,不但要對(duì)內(nèi)存以及CPU使用情況進(jìn)行考慮,還要對(duì)數(shù)據(jù)庫(kù)的運(yùn)行情況進(jìn)行考慮。最終收集的數(shù)據(jù)有執(zhí)行的功耗數(shù)據(jù)、系統(tǒng)當(dāng)前運(yùn)行狀態(tài)的表征數(shù)據(jù)以及操作符讀取的頁(yè)面數(shù)據(jù)等三個(gè)部分?jǐn)?shù)據(jù)組成。把數(shù)據(jù)庫(kù)與系統(tǒng)內(nèi)部表征數(shù)據(jù)在功耗模型建立中作為輸入來對(duì)功耗進(jìn)行預(yù)測(cè)。
可以收集的系統(tǒng)信息有:系統(tǒng)熱設(shè)計(jì)功耗值、內(nèi)存以及CPU使用率。其中系統(tǒng)熱設(shè)計(jì)功耗值是常量值,是系統(tǒng)運(yùn)行的功耗上限,能夠?qū)UP 使用率以及內(nèi)存使用率實(shí)時(shí)進(jìn)行獲取,在Linux操作系統(tǒng)當(dāng)中,對(duì)于內(nèi)存及CPU 使用率可通過讀取meminfo 文件、proc 文件、stat 文件以及proc 文件的內(nèi)容來進(jìn)行確定。CPU所有的活動(dòng)信息都包含在stat 文件當(dāng)中,stat 文件中所有值從啟動(dòng)系統(tǒng)之后一直到當(dāng)前時(shí)刻,stat、proc 以及cat 執(zhí)行后的內(nèi)容如表1 所示。
表1 CPU 的運(yùn)行信息
對(duì)文件的內(nèi)容選擇兩個(gè)時(shí)刻來進(jìn)行讀取,這段時(shí)間內(nèi)的CPU使用率通過計(jì)算能夠得到,即
從meminfo 文件中提取內(nèi)存總量以及內(nèi)存使用量?jī)蓚€(gè)數(shù)據(jù)來計(jì)算內(nèi)存使用量,其如公式(2)所示。
對(duì)于數(shù)據(jù)庫(kù)信息,在數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)通過分類方式列出了可獲取的參數(shù)與含義,如表2 與表3 所示。
表2 所有物理操作符的共同特征
表3 基于特定操作符的特征
需要對(duì)內(nèi)核中的relation.h、plannodes.h、explain.c、createplan.c 以及costsize.c 等文件進(jìn)行修改才能在PostgreSQL 中具體實(shí)現(xiàn)。結(jié)構(gòu)體plan 通過對(duì)relation.h與plannodes.h 文件進(jìn)行修改,path 定義添加相應(yīng)類型字段來對(duì)信息進(jìn)行記錄,可通過explain+SQL查詢方式在PostgreSQL數(shù)據(jù)庫(kù)中顯示SQL查詢執(zhí)行計(jì)劃樹。
需有相應(yīng)負(fù)載才能進(jìn)行數(shù)據(jù)采集工作,在查詢負(fù)載運(yùn)行中收集數(shù)據(jù)。因?yàn)門PC-H 由一系列操作符組成執(zhí)行樹,是復(fù)查查詢,在采集數(shù)據(jù)中,會(huì)遇到下面兩個(gè)問題:
(1) 在測(cè)試平臺(tái)中,雖然能夠?qū)崟r(shí)的監(jiān)按測(cè)試機(jī)的運(yùn)行功耗,但因物理操作符不確定的執(zhí)行時(shí)序,對(duì)每個(gè)操作的執(zhí)行時(shí)段很難確定,所以對(duì)其運(yùn)行功耗也很難確定。(2) 系統(tǒng)信息采集對(duì)于單個(gè)操作符有著較大的誤差,這是因?yàn)閷?duì)meminfo文件、proc 文件等段時(shí)間內(nèi)頻繁的讀取導(dǎo)致的。
由此,本文對(duì)于數(shù)據(jù)的收集提出簡(jiǎn)單負(fù)載原則通過查詢負(fù)載進(jìn)行有效的收集,另外對(duì)操作符真實(shí)功耗通過數(shù)據(jù)有效的進(jìn)行反映。在運(yùn)行負(fù)載設(shè)計(jì)時(shí),盡可能的使不同查詢不存在操作符交集、單個(gè)查詢涉及較少操作符、盡可能的整個(gè)負(fù)載包括所有類型操作符。
根據(jù)訓(xùn)練數(shù)據(jù)集,對(duì)操作符層功耗模型采取回歸分析法來進(jìn)行建立,對(duì)于單個(gè)物理操作符采取兩個(gè)特征數(shù)據(jù)來得到預(yù)測(cè)功能模型:(1) 在DBMS 內(nèi)部,對(duì)執(zhí)行時(shí)的元組數(shù)目、選擇讀以及讀取頁(yè)面數(shù)目等信息進(jìn)行采集。(2) 目前CPU使用率,單個(gè)操作符預(yù)測(cè)功耗為:
對(duì)于F 通過訓(xùn)練數(shù)據(jù)集來進(jìn)行回歸分析,計(jì)算復(fù)雜度在實(shí)際使用中要進(jìn)行考慮,總誤差率值為f,誤差率
作為目標(biāo)函數(shù)。
下一步,對(duì)于查詢計(jì)劃平均功耗由單個(gè)物理操作預(yù)測(cè)功耗來進(jìn)行估計(jì),由物理操作符構(gòu)成的執(zhí)行計(jì)劃樹能夠作為任意一個(gè)查詢,一個(gè)合法的執(zhí)行計(jì)劃樹都是由每組操作符有序執(zhí)行的結(jié)果。tO在傳統(tǒng)代價(jià)估計(jì)中表示操作符時(shí)間估計(jì),TQ表示執(zhí)行計(jì)劃時(shí)間估計(jì),如公式(5)所示。
總時(shí)間可通過時(shí)間累加表示,但是功耗累加沒有任何意義。本篇文章來加權(quán)累加每一個(gè)操作符的功耗,而不是對(duì)操作符直接進(jìn)行疊加,其得到的查詢功耗,如公式(6)與公式(7)所示。
在上述公式中,Tmp 表示中間變量,計(jì)算操作符時(shí)間和功耗的乘積。
對(duì)于TPC-H 基準(zhǔn)在兩種不同系統(tǒng)下進(jìn)行測(cè)試,在生成的數(shù)據(jù)集中對(duì)TPC-H 測(cè)試查詢語句分別運(yùn)行,對(duì)于查詢執(zhí)行平均功耗通過能耗測(cè)試平臺(tái)進(jìn)行計(jì)算統(tǒng)計(jì),以此對(duì)模型精度進(jìn)行計(jì)算。
對(duì)競(jìng)爭(zhēng)運(yùn)行環(huán)境與靜態(tài)運(yùn)行環(huán)境下的性能進(jìn)行測(cè)試,靜態(tài)因依次單個(gè)執(zhí)行測(cè)試查詢,獨(dú)占系統(tǒng),競(jìng)爭(zhēng)不是獨(dú)占系統(tǒng)資源,存在其他應(yīng)用,通過Web 服務(wù)程序來進(jìn)行模擬。
時(shí)間性能隨著α 的增加而變差,且平均功耗降低,符合預(yù)期。查詢優(yōu)化器在功耗與性能間的均衡通過α能夠有效的進(jìn)行調(diào)節(jié),如果α 的值設(shè)置的較大,那么就會(huì)偏向功耗低的執(zhí)行計(jì)劃,由此會(huì)降低執(zhí)行的時(shí)間性能,實(shí)驗(yàn)中能夠得出,能耗有效性在α 值為0 到0.30 時(shí)比較好。
TPC-C是聯(lián)機(jī)事務(wù)處理的基準(zhǔn)測(cè)試,能耗有效查詢優(yōu)化策略通過使用TPC-C 來對(duì)聯(lián)機(jī)事務(wù)處理性能進(jìn)行測(cè)試,實(shí)驗(yàn)中定義能耗有效性為:
通過測(cè)試結(jié)果能夠得出:對(duì)于能耗通過將功耗代價(jià)添加到查詢優(yōu)化器中而能夠進(jìn)行優(yōu)化,但是不能只對(duì)功耗進(jìn)行優(yōu)化,而對(duì)性能選擇忽視。
本篇文章在優(yōu)化器中將能耗代價(jià)引入其中,并對(duì)功耗預(yù)測(cè)提出回歸分析操作符方法。此外,查詢代價(jià)模型在引入性能退化調(diào)節(jié)因子后能夠兼顧性能與能耗,對(duì)于能耗有效查詢優(yōu)化器在在PostgreSQL上進(jìn)行實(shí)現(xiàn)。能耗有效查詢優(yōu)化技術(shù)的可行性以及實(shí)用性通過TPC-C 和TPC-H 結(jié)果得到了驗(yàn)證。
在本次實(shí)驗(yàn)中,對(duì)于能耗與性能測(cè)試根據(jù)開源的PostgreSQL 進(jìn)行開展,目前商用DBMS 采用了類似PostgreSQL 的查詢優(yōu)化技術(shù)。所以本次結(jié)果具有普適應(yīng),能在其他關(guān)系型數(shù)據(jù)庫(kù)中進(jìn)行推廣應(yīng)用。
未來對(duì)于聚集、連接等復(fù)雜查詢操作符的功耗代價(jià)估計(jì)方法進(jìn)行研究,針對(duì)性的提出能耗有效查詢優(yōu)化的方法。另外,目前通常以服務(wù)器集群的方式來對(duì)數(shù)據(jù)中心進(jìn)行部署,數(shù)據(jù)中心在能耗方面不但會(huì)受服務(wù)器節(jié)點(diǎn)的影響,其也會(huì)因集群中的數(shù)據(jù)遷移與分布式調(diào)度等情況而受到影響,對(duì)于以后的工作,能耗有效的解決方案可通過數(shù)據(jù)中心的任務(wù)調(diào)度以及分布式查詢處理等進(jìn)行研究。