亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種高效準(zhǔn)確的基于查詢結(jié)果的基數(shù)估計策略

        2018-09-07 10:36:50高錦濤李戰(zhàn)懷劉文潔
        關(guān)鍵詞:謂詞基數(shù)數(shù)據(jù)量

        高錦濤, 李戰(zhàn)懷, 劉文潔

        (西北工業(yè)大學(xué) 計算機(jī)學(xué)院, 陜西 西安 710072)

        基數(shù)估計是查詢優(yōu)化的重要組成部分,其效率以及準(zhǔn)確性關(guān)系到優(yōu)化器能否快速、準(zhǔn)確生成最優(yōu)執(zhí)行計劃。文獻(xiàn)[1]中指出基數(shù)估計的錯誤率隨著連接表的數(shù)量呈指數(shù)型增長,原因是中間結(jié)果的基數(shù)估計需要通過基本表的基數(shù)估計進(jìn)行再推導(dǎo)得到。如果有多個連接,則存在多個迭代的中間結(jié)果,因此錯誤率被逐漸擴(kuò)大。如果基本表的基數(shù)估計錯誤率較大,則嚴(yán)重影響查詢優(yōu)化的效果。

        隨著大數(shù)據(jù)時代的到來,數(shù)據(jù)庫處理的數(shù)據(jù)量激增,在這種數(shù)據(jù)環(huán)境下,傳統(tǒng)基于原表離線收集模式會大大降低數(shù)據(jù)的收集效率并增大基數(shù)更新延遲。而基于原表樣本的收集模式雖然能夠緩解大數(shù)據(jù)收集效率問題,但為保證準(zhǔn)確度,需要較大的樣本空間。一些策略[2-3]為避免從基本表推導(dǎo)得到基數(shù),通過先前執(zhí)行的一些查詢的反饋信息或者通過執(zhí)行當(dāng)前查詢的一些重要的子查詢得到的結(jié)果作為基數(shù)值。這些策略雖然能夠在查詢運(yùn)行時獲得所需參數(shù),但需要額外的查詢執(zhí)行代價,對于查詢數(shù)據(jù)量很大的情況,代價較高。

        本文提出一種高效準(zhǔn)確的基于查詢結(jié)果的基數(shù)估計策略,特點(diǎn)是維護(hù)一張基數(shù)表,基數(shù)表中的項(xiàng)(簡稱基數(shù)項(xiàng))的內(nèi)容為基本表或者中間結(jié)果在特定謂詞下運(yùn)行時得到的實(shí)際的執(zhí)行結(jié)果的基數(shù),保證基數(shù)的準(zhǔn)確度。添加基數(shù)項(xiàng)熱度、過期信息等內(nèi)容,增加基數(shù)項(xiàng)的可操作性。通過動態(tài)感知緩存資源,將基數(shù)項(xiàng)合理分配到緩存中,降低統(tǒng)計信息延遲。

        1 相關(guān)工作

        關(guān)于基數(shù)估計的研究主要集中在不同架構(gòu)下的基數(shù)估計策略以及不同查詢階段的基數(shù)估計策略。不同架構(gòu)指集中式和分布式架構(gòu),不同查詢階段指查詢編譯期和執(zhí)行期。基數(shù)估計分為統(tǒng)計信息收集、維護(hù)和使用3個階段,下面就這3個階段在上述2個研究方面上的不同實(shí)施策略進(jìn)行闡述。

        1.1 不同架構(gòu)下基數(shù)估計策略

        1.1.1 集中式架構(gòu)

        ·收集階段為處理大數(shù)據(jù),集中式架構(gòu)收集策略一般采用樣本收集[4-7]。如postgresql[4],可根據(jù)樣本率調(diào)整收集數(shù)據(jù)量。Oracle[5]提供多種收集接口,如DBMS_STATS,允許用戶規(guī)定統(tǒng)計收集的并行度、樣本方法以及收集粒度。Teradata[6]規(guī)定初始樣本率為2%,如果檢測到收集的結(jié)果發(fā)生傾斜,則自動將樣本率調(diào)整到50%。文獻(xiàn)[8]給出了保證統(tǒng)計信息準(zhǔn)確度的收集量。

        ·維護(hù)階段對于收集完畢的統(tǒng)計信息,如果原始數(shù)據(jù)改變較大,則需要對統(tǒng)計信息進(jìn)行維護(hù),保證其準(zhǔn)確性。通常做法為設(shè)置一個單獨(dú)線程,如postgresql的collector線程,用來捕捉更新量,如果判斷更新量超過某個閾值,則觸發(fā)維護(hù)機(jī)制。

        ·使用階段優(yōu)化器基于統(tǒng)計信息評估計劃優(yōu)劣。優(yōu)化器從存儲統(tǒng)計信息的位置獲取統(tǒng)計信息,如postgresql,Oracle等,將統(tǒng)計信息存儲于系統(tǒng)表,使用時,直接從系統(tǒng)表獲取統(tǒng)計信息。

        1.1.2 分布式架構(gòu)

        ·收集階段分布式架構(gòu)下統(tǒng)計信息收集手段包括:依賴中心控制節(jié)點(diǎn)收集和分布式節(jié)點(diǎn)收集。Orca[9]中統(tǒng)計任務(wù)發(fā)生在主節(jié)點(diǎn)的memo結(jié)構(gòu)中,收集單位是memo[10]中的組,數(shù)據(jù)來自底層分布式架構(gòu)。微軟的PDW QO[11],對每一個分布式節(jié)點(diǎn)執(zhí)行SQL語句進(jìn)行本地統(tǒng)計信息收集,并將收集后的統(tǒng)計信息存儲在本地。文獻(xiàn)[12]提出的解中心化統(tǒng)計方式,將數(shù)據(jù)路由到工作節(jié)點(diǎn),由工作節(jié)點(diǎn)實(shí)時收集統(tǒng)計信息。文獻(xiàn)[13]中統(tǒng)計信息的收集源來自內(nèi)存,雖然收集速度快,但收集的量有限。

        ·維護(hù)階段分布式架構(gòu)下,統(tǒng)計信息維護(hù)手段與集中式類似,由更改數(shù)據(jù)量是否超過閾值觸發(fā)收集任務(wù)。

        ·使用階段分布式架構(gòu)下,統(tǒng)計信息的使用方式主要通過局部統(tǒng)計信息推導(dǎo)出全局統(tǒng)計信息[9-11]。PDW QO[11]將存儲在shellbase中的局部統(tǒng)計信息合并成全局統(tǒng)計信息。類似的,Orca[9]在生成父親組的統(tǒng)計信息時,會給孩子組發(fā)送請求,由孩子組將各自的統(tǒng)計信息傳遞給父親組,由父親組合并成全局統(tǒng)計信息。文獻(xiàn)[14-15]則利用不同的分布式節(jié)點(diǎn)交換統(tǒng)計信息。

        1.2 不同查詢階段基數(shù)估計策略

        基數(shù)為推導(dǎo)信息,來源于基本統(tǒng)計信息[16]。統(tǒng)計信息一般以直方圖進(jìn)行表示,對于直方圖的詳細(xì)闡述可以參考文獻(xiàn)[17]。統(tǒng)計信息服務(wù)于優(yōu)化器,目前常見的優(yōu)化器工作階段分為查詢的編譯期以及執(zhí)行期,由于這2個階段主要涉及統(tǒng)計信息的使用,因此這里只討論統(tǒng)計信息的使用階段。

        1.2.1 編譯期

        ·使用階段查詢編譯器涉及到的統(tǒng)計信息為靜態(tài)統(tǒng)計信息,獲得手段為on-line模式[4-7](統(tǒng)計信息收集和使用在同一時刻)或者off-line模式[9-11](統(tǒng)計信息收集和使用分離)。這2種模式下獲得的統(tǒng)計信息是靜態(tài)的,不會根據(jù)執(zhí)行時值的變化動態(tài)調(diào)整統(tǒng)計信息,維持準(zhǔn)確性。

        1.2.2 執(zhí)行期

        ·使用階段由于基數(shù)估計涉及的參數(shù)在執(zhí)行期可能發(fā)生較大改變,因此基于靜態(tài)基數(shù)估計的優(yōu)化器通常得不到準(zhǔn)確的基數(shù)。為使基數(shù)估計能夠根據(jù)執(zhí)行期實(shí)際運(yùn)行結(jié)果進(jìn)行動態(tài)調(diào)整,一些自適應(yīng)策略[2-3]被提出。文獻(xiàn)[2]中提出一種ASE(adaptive selectivity estimator,自適應(yīng)選擇度估計)策略,不需要進(jìn)行離線的統(tǒng)計信息收集或者建立樣本,而是根據(jù)子查詢的反饋結(jié)果進(jìn)行基數(shù)估計,具體策略為以一系列查詢?yōu)榛鶞?zhǔn),根據(jù)前置查詢的執(zhí)行結(jié)果自我調(diào)整后續(xù)查詢的統(tǒng)計信息,進(jìn)而提高基數(shù)估計的準(zhǔn)確度。

        1.3 討 論

        上述各種策略對于統(tǒng)計信息的使用是即時的,沒有利用執(zhí)行期查詢執(zhí)行結(jié)果提高收集統(tǒng)計信息效率以及準(zhǔn)確度,并將其進(jìn)行緩存,利于后續(xù)使用。雖然文獻(xiàn)[2]能夠在執(zhí)行期收集,但面對大數(shù)據(jù)量,收集效率較低,影響查詢性能。文獻(xiàn)[3]提出的LEO(learning optimizer,自學(xué)習(xí)優(yōu)化器)涉及的基數(shù)估計策略和我們提出的思想最為接近,監(jiān)控并學(xué)習(xí)查詢執(zhí)行過程中的基數(shù)估計結(jié)果,用來提供后續(xù)基數(shù)估計的準(zhǔn)確度,但沒有進(jìn)行資源感知以及查詢結(jié)果的緩存。

        2 相關(guān)定義

        為便于理解論文提出的基于查詢結(jié)果的基數(shù)估計方法,給出如下相關(guān)定義。

        定義1基數(shù)項(xiàng)(CardItem),存儲基于查詢結(jié)果的統(tǒng)計信息的最小單位,類似關(guān)系中一個元組,形式化表示為:Ci=(type,name,predicate,cardinality,expire,hot),鍵為:(name,predicate),下文將Ci簡寫為(t,n,p,c,e,h)。參數(shù)解釋如表1。

        定義2基數(shù)表(CardTable),用來存儲各個基數(shù)項(xiàng),形式化定義為Ct={Ci}。Ct可以以關(guān)系的形式進(jìn)行存儲,方便建立索引,加快Ci的獲取速度。

        表1 Ci參數(shù)介紹

        3 基于查詢結(jié)果的基數(shù)估計策略

        3.1 架 構(gòu)

        如圖1所示,傳統(tǒng)查詢處理過程:輸入查詢,解析器將查詢轉(zhuǎn)換為邏輯樹,根據(jù)邏輯樹進(jìn)行查詢優(yōu)化,生成計劃,執(zhí)行計劃并得到最終結(jié)果。

        圖1 基于CEQR的查詢架構(gòu)圖

        查詢優(yōu)化過程中,利用統(tǒng)計信息推導(dǎo)出基本表和中間結(jié)果的基數(shù)進(jìn)行基于代價的查詢優(yōu)化。引入CEQR策略后,首先根據(jù)邏輯樹執(zhí)行基數(shù)鍵提取模塊(3.2小節(jié)),得到基本表與其關(guān)聯(lián)謂詞的對應(yīng)關(guān)系,形成三元組(t,n,p),其中(n,p)為基數(shù)鍵,然后根據(jù)基數(shù)鍵利用資源感知模塊(3.3小節(jié))查找對應(yīng)的基數(shù)項(xiàng)(Ci)將Ci反饋給查詢優(yōu)化模塊?;鶖?shù)表維護(hù)(3.4小節(jié))的內(nèi)容來自更新操作產(chǎn)生的更改數(shù)據(jù)以及計劃執(zhí)行的結(jié)果。

        3.2 基數(shù)鍵提取

        為方便分析,采用經(jīng)典SPJ(select project join,選擇,映射,連接)格式[18]作為對象。這里只針對基表(B)進(jìn)行提取,中間結(jié)果部分在計劃執(zhí)行階段通過基表推導(dǎo)或者從Ct中獲取。提取過程如圖2所示,{n1,n2,..,nm}為連接的基表,{p1,p2,…,pk}為選擇謂詞。以基表為單位,將屬于這個基表的選擇謂詞映射到這個基表,然后形成一個三元組(t,n,p)。(t,n,p)為Ci的一部分,p為選擇謂詞構(gòu)成的集合。如果p中某些子集能夠合并,即這些子集中的元素涉及相同列的謂詞,則將其合并成一個謂詞。

        圖2 基數(shù)鍵提取

        示例見圖3,圖3中,c1,c2表示表的列名。如p1(n1.c1<100)和p3(n1.c1>0)同時隸屬于n1表的c1列,因此將這2個謂詞合并,形成新的謂詞:c1(0,100)。

        圖3 基數(shù)鍵提取示例

        3.3 資源感知策略

        隨著硬件技術(shù)的發(fā)展,緩存資源越來越豐富,為

        充分利用富余緩存資源,提高Ci獲取速度,將熱Ci映射到合適的緩存區(qū)。這里將Ci分為熱Ci(Hot CI,簡稱Hot-Ci)、冷Ci(Cold CI,簡稱Col-Ci)和溫CI(Middle CI,簡稱Mid-Ci)。Hot-Ci常駐緩存,Col-Ci常駐磁盤,冷熱數(shù)據(jù)通過Ci訪問頻度進(jìn)行標(biāo)識。Mid-Ci指新生成的Ci,需要將它的鍵與緩存中Ci項(xiàng)的鍵進(jìn)行比較確定其冷熱程度。資源感知過程如圖4,其中{k1,k2,…}表示Ct表中各個Ci的鍵值,對應(yīng)定義(1)中的(n,p)。緩存中以Ci格式定義緩存項(xiàng)。如果存在相等的緩存項(xiàng),則進(jìn)行合并(合并方式見3.4節(jié))。如果沒有匹配,則標(biāo)記為Col-Ci存儲到Ct中。這里規(guī)定初始映射到緩存項(xiàng)的Ci為舊Ci(o),新生成的Ci標(biāo)記為新Ci(n)。

        圖4 資源感知過程

        為合理安排Ci,提出如下資源管理方法。每一個Ci大小基本固定,設(shè)置為r,并規(guī)定緩存資源(Si)中Ci所占百分比為pi,則某一個緩存資源Si所能存儲的Ci的個數(shù)如(1)所示。

        (1)

        利用(2)中的哈希函數(shù)根據(jù)Ci的鍵將其映射到合適的Si中,并保證按鍵排序,其中N表示Si的個數(shù)。如果某一個Si中保存的Ci個數(shù)違反公式(1),則利用線性探測再散列的方式找到其合適的存放位置A。

        (2)

        3.4 基數(shù)表維護(hù)

        基數(shù)表(Ct)與基本表數(shù)據(jù)大小無關(guān),但與基本表數(shù)據(jù)的內(nèi)容和查詢句式相關(guān),即原始基本表數(shù)據(jù)改變或者查詢句式改變,都有可能導(dǎo)致Ct的改變,即影響Ci的準(zhǔn)確度,需要對Ct進(jìn)行維護(hù)。維護(hù)內(nèi)容分為兩方面:更改維護(hù)(3.4.1節(jié))和查詢維護(hù)(3.4.2節(jié))。

        3.4.1 更改維護(hù)

        數(shù)據(jù)庫中insert/update/delete 3種操作會改變基本表的數(shù)據(jù),間接影響Ct,為統(tǒng)一維護(hù)接口,將insert/update/delete 3種操作涉及的數(shù)據(jù)轉(zhuǎn)換為(t,n,p,c)格式,(n,p)對應(yīng)Ct中的鍵。其中c只針對insert操作。轉(zhuǎn)換過程如下。

        ·insert轉(zhuǎn)換:將insert中涉及到的插入值轉(zhuǎn)換為謂詞形式,即統(tǒng)計各個插入列對應(yīng)的值的最大值、最小值以及行數(shù)(c),得出(t,n,p,c)四元組,其中p由插入的值中最小值和最大值形成的區(qū)間得到。

        ·update轉(zhuǎn)換:將update中涉及到的更新謂詞映射到需要更新的表中,形成(t,n,p)。

        ·delete轉(zhuǎn)換:將delete中涉及到的刪除謂詞映射到需要刪除的表中,形成(t,n,p)。

        由于(t,n,p,c)對應(yīng)的Ci可能已經(jīng)存在,因此需要根據(jù)情況對Ci舊值和新值進(jìn)行基于鍵的合并、刪除、更新等操作。維護(hù)的情況共分為4種:舊鍵包含新鍵、新鍵包含舊鍵、新鍵與舊鍵相交、新鍵與舊鍵不相交。具體維護(hù)操作列表如圖5,其參數(shù)介紹如表2。

        具體維護(hù)策略為:如果n-n和o-n不相等,則將n-n對應(yīng)的Ci直接插入到Ct中。如果相等,則根據(jù)新舊謂詞的關(guān)系(圖5中的第一列)分類進(jìn)行維護(hù)。具體以圖5中第三行為例進(jìn)行說明。對于Ci的其他項(xiàng)e和h,分別設(shè)為默認(rèn)值false和1。

        ·insert操作:首先利用me操作將新舊謂詞合并成新的謂詞m-p,然后運(yùn)行add操作將新舊基數(shù)相加得到新的基數(shù)m-c。雖然舊Ci的基數(shù)發(fā)生改變,但仍然存在概率被使用,為增加命中率,這里并不舍棄這個Ci,而是利用upd操作以σ倍的m-c更新為新的基數(shù),最后將新形成的Ci(n-n,m-p,m-c),利用ins操作插入到Ct中。

        ·delete操作:首先生成m-c,然后更新舊Ci的基數(shù)。

        ·update操作:直接將新形成的Ci插入到Ct中,原因是update操作對于重疊的謂詞部分的更新并沒有改變這個范圍內(nèi)的行數(shù)。

        圖5 基數(shù)表維護(hù)操作列表

        3.4.2 查詢維護(hù)

        維護(hù)過程如圖6所示,其中t1,t2表示基本表,J1表示中間結(jié)果,即表連接后的結(jié)果。為具體說明維護(hù)過程,以流行的流水線執(zhí)行方式[19]為例,以左深樹表示執(zhí)行計劃。構(gòu)建操作包括:fetch(p),counter( ),join(n1,n2,p),update(n,p,c)。

        fetch(p),作用是獲取一行滿足特定謂詞的數(shù)據(jù),應(yīng)用在基本表(B)的取數(shù)據(jù)操作和流水線某一個步驟(連接)的取數(shù)據(jù)操作。counter( ),作用是統(tǒng)計基表或中間結(jié)果實(shí)際輸出行數(shù)。join(n1,n2,p),作用是根據(jù)連接條件連接兩部分?jǐn)?shù)據(jù),n1和n2可能是基本表,也可能是中間結(jié)果。update(t,n,p,c),將3.2節(jié)形成的(t,n,p)以及獲得的基數(shù)c通過鍵(n,p)對Ct進(jìn)行更新,更新過程詳見3.4.1節(jié)。維護(hù)過程如下。

        ·在計劃執(zhí)行過程中,從根節(jié)點(diǎn)開始遍歷整顆物理計劃樹,并根據(jù)每一個節(jié)點(diǎn)的執(zhí)行結(jié)果獲得基數(shù)。

        ·對于中間結(jié)果(J1),采取如下步驟獲取基數(shù):join->fetch->counter->update。

        ·對于基本表(t),采取如下步驟獲取基數(shù):fetch->counter->update。

        ·基數(shù)獲取完畢后,通過資源感知模塊(3.3節(jié))將對應(yīng)的基數(shù)保存到緩存或者Ct中。

        圖6 查詢維護(hù)過程

        4 算 法

        本章給出基于查詢結(jié)果的基數(shù)估計策略(CEQR)算法偽代碼描述。

        CEQR算法

        輸入:Q,Ct,S

        輸出:{Ci}

        1.A-tree=parse(Q)

        2.B-keys=extract-keys(A-tree)

        3.cards=get-cached-cards(B-keys,S)

        4.IF NULL==cards

        5. cards=get-basic-cards(B-keys,S)

        6.P-tree=gene-physical-plan(cards)

        7.{Ci}=collect-Ci(P-tree.root)

        8.maintain-Ct({Ci},Ct,S)

        CEQR算法對查詢(Q)進(jìn)行解析(parse),生成邏輯樹(A-tree)(行1),利用基數(shù)鍵提取功能從邏輯樹中提取基數(shù)項(xiàng)鍵值(B-keys,對應(yīng)(n,p))(行2)。利用鍵值到緩存(S)中查找對應(yīng)的基數(shù)(行3),如果基數(shù)不存在,則需要到基數(shù)表中查找基數(shù)(行4~5)。將得到的基數(shù)應(yīng)用到查詢優(yōu)化中物理計劃(P-tree)產(chǎn)生部分(行6)。在計劃執(zhí)行過程中調(diào)用collect-Ci函數(shù)從物理計劃樹中根節(jié)點(diǎn)(root)遞歸收集所有基表以及中間結(jié)果的基數(shù)(行7)。收集完畢后,調(diào)用maintain-Ct函數(shù)對基數(shù)表進(jìn)行維護(hù)(行8)。

        函數(shù)collect-Ci

        輸入:root

        輸出:{Ci}

        1. IF root !=NULL

        2. cards=execute(root)

        3. IF root.type==B

        4. {Ci}.push(B,cards)

        5. IF root.type==M

        6. {Ci}.push(M,cards)

        7. collect-Ci(root.left-child)

        8. collect-Ct(root.right-child)

        函數(shù)collect-Ci用于根據(jù)執(zhí)行結(jié)果收集基數(shù)。過程為:如果物理計劃樹根節(jié)點(diǎn)存在,則對于計劃樹中的每一個節(jié)點(diǎn),根據(jù)執(zhí)行的結(jié)果統(tǒng)計返回的行數(shù)(行1~2)。如果當(dāng)前節(jié)點(diǎn)類型為基本表,則將基本表對應(yīng)的基數(shù)存放到{Ci}中;如果為中間結(jié)果,則將中間結(jié)果對應(yīng)的基數(shù)存放到{Ci}中(行3~6)。遞歸遍歷左子樹和右子樹(行7~8)。

        函數(shù)maintain-Ct

        輸入:{Ci},Ct,S

        輸出:Ct

        1. FOR eachCiin {Ci}

        2. addr=Hash(Ci)

        3. old-Ci=fetch(S,addr)

        4. IF old-Ci!=NULL

        5. new-Ci=merge(Ci,old-Ci)

        6. update(S,new-Ci)

        7. store(new-Ci,Ct)

        8. ELSE

        9. store(Ci,Ct)

        函數(shù)maintain-Ct作用為針對產(chǎn)生的基數(shù)項(xiàng)進(jìn)行基數(shù)表的維護(hù),過程為:對于每一個產(chǎn)生的基數(shù)項(xiàng),計算其緩存地址,根據(jù)緩存地址獲取緩存中已經(jīng)存在的基數(shù)項(xiàng)(行1~3)。如果存在,則將其和輸入的緩存項(xiàng)合并成新的Ci,更新本地緩存項(xiàng),并存儲到Ct中(行4~7)。如果不存在,則判斷為冷Ci,直接存儲到Ct中(行8~9)。

        5 算法分析

        傳統(tǒng)基數(shù)估計步驟分為:統(tǒng)計信息收集(C)、統(tǒng)計信息獲取(G)以及基數(shù)估計(E)。CEQR策略下,將基數(shù)估計分成基數(shù)鍵提取(De)、緩存查找(Fe)、Ci生成(Ge)、資源感知(Se)、基數(shù)獲取(Eg)五部分。根據(jù)功能,有映射:(Ge,Se)->C,(De,Fe,Se)->G,Eg->E。下面就CEQR算法代價進(jìn)行評估。

        傳統(tǒng)基數(shù)估計策略(TRA)估計時間代價見(3)式。其中T表示不同階段的時間代價,t表示一次網(wǎng)絡(luò)通信代價,N表示統(tǒng)計信息收集時需要進(jìn)行的網(wǎng)絡(luò)通信次數(shù),與數(shù)據(jù)量成正比,M表示某個表數(shù)據(jù)分布的節(jié)點(diǎn)個數(shù)。

        TTRA=TC+TG+TE

        (3)

        公式(3)中,無論是集中式(centralized)還是分布式(distributed),基數(shù)估計(E)都是在查詢節(jié)點(diǎn)內(nèi)存中操作,涉及數(shù)據(jù)量小,因此其時間代價可忽略(ignored)。統(tǒng)計信息獲取(G)時,集中式下可忽略,而分布式環(huán)境下,由于一個表的統(tǒng)計信息分布存儲,因此在查詢節(jié)點(diǎn)獲得統(tǒng)計信息時需要將局部統(tǒng)計信息進(jìn)行整合,消耗網(wǎng)絡(luò)代價。統(tǒng)計信息收集與數(shù)據(jù)量相關(guān),在數(shù)據(jù)量較大時,需要消耗大量CPU代價(#CPU)和IO代價(#IO)。γ取值為{0,1},當(dāng)收集統(tǒng)計信息時,需要形成全局和局部兩種統(tǒng)計信息,則取值為1,代表消耗網(wǎng)絡(luò)代價,如文獻(xiàn)[20];當(dāng)只形成局部統(tǒng)計信息,則取值為0,代表不需要消耗網(wǎng)絡(luò)代價,如文獻(xiàn)[21]。CEQR算法的時間代價如(4)式。

        (4)

        由于De和Eg都是在內(nèi)存中進(jìn)行,并且處理數(shù)據(jù)量很小,因此效率與E相當(dāng)。Fe根據(jù)鍵到緩存獲得Ci,如果命中(hit),則代價忽略,如果不命中(non-hit),需要消耗一次網(wǎng)絡(luò)代價到Ct中獲取Ci。即使分布式環(huán)境下,也不需要進(jìn)行統(tǒng)計信息的合并,因此多數(shù)情況下不需要消耗網(wǎng)絡(luò)代價。資源感知(Sw)策略作用是將熱數(shù)據(jù)映射到合適的緩存資源中,分布式環(huán)境下需要消耗網(wǎng)絡(luò)資源,與分布式節(jié)點(diǎn)數(shù)(K)相關(guān)。

        綜上所述,傳統(tǒng)基數(shù)估計策略與原數(shù)據(jù)量相關(guān),即使采用樣本策略,為保證準(zhǔn)確度,也需要在較大樣本空間下進(jìn)行。CEQR算法與原數(shù)據(jù)量無關(guān),隨著查詢數(shù)量的增多,算法的準(zhǔn)確度和效率大幅提升。通過(5)式的推導(dǎo),得出TCEQR<=TTRA,等號成立的情況為在執(zhí)行Fe時緩存不命中,隨著查詢數(shù)量的增多,這種情況將大大減少。

        basedon:TDe?TE,TGe?TE,

        TEg?TE,TFe≤TG,

        TSe≤TG

        infer:TCEQR≤TTRA

        (5)

        6 適應(yīng)性

        CEQR策略的效果會隨著查詢語句數(shù)量的增大而增強(qiáng),并且隨著硬件的發(fā)展,緩存資源逐漸豐富,能夠充分滿足CEQR策略的資源感知需求,大大降低統(tǒng)計信息的獲取以及維護(hù)代價。因此CEQR策略能夠滿足OLAP、OLTP以及OLAP&OLTP系統(tǒng)中進(jìn)行大數(shù)據(jù)量基數(shù)估計需求。

        7 誤差分析

        定義3基數(shù)估計誤差,即利用統(tǒng)計信息推導(dǎo)出的基數(shù)值和運(yùn)行時實(shí)際基數(shù)值之間的差值。這里定義3種誤差:初始誤差(ΔI),表示計算基本表基數(shù)值產(chǎn)生的誤差;連接誤差(ΔJ),表示根據(jù)基本表推導(dǎo)出連接結(jié)果基數(shù)值產(chǎn)生的誤差;更新誤差(ΔU),表示原數(shù)據(jù)更新導(dǎo)致依賴的基數(shù)值過期產(chǎn)生的誤差。這3種誤差的定義以及關(guān)系如(6)式所示。VE和VA分別表示基數(shù)估計值和實(shí)際基數(shù)值。

        ΔI|J|U=|VE-VA|

        (6)

        如果基數(shù)一經(jīng)產(chǎn)生不會改變,則更新誤差不存在,如OLAP系統(tǒng)。對于OLTP和OLAP&OLTP混合的系統(tǒng),根據(jù)文獻(xiàn)[1],ΔU加強(qiáng)(power)ΔI,而ΔI加強(qiáng)ΔJ,ΔJ則加強(qiáng)優(yōu)化偏差。傳統(tǒng)基數(shù)估計策略3種誤差都存在,并且由于數(shù)據(jù)關(guān)聯(lián)性以及樣本建立策略的不合理,導(dǎo)致ΔI值較大,嚴(yán)重影響優(yōu)化器的優(yōu)化效果?;贑EQR的基數(shù)估計策略保存基本表和中間結(jié)果的準(zhǔn)確基數(shù)值,因此大大降低了ΔI和ΔJ值。通過資源感知策略結(jié)合細(xì)粒度Ci,大大降低ΔU值。

        8 實(shí) 驗(yàn)

        8.1 實(shí)驗(yàn)環(huán)境

        我們將CEQR策略實(shí)施在淘寶開源數(shù)據(jù)庫——Oceanbase(源碼見文獻(xiàn)[22],架構(gòu)見文獻(xiàn)[23])中。利用Oceanbase的單節(jié)點(diǎn)模式和集群模式搭建集中式測試環(huán)境和分布式測試環(huán)境。配置如下。

        單節(jié)點(diǎn)模式 主頻為1400MHz的AMD Opteron(TM)處理器和16G內(nèi)存,物理CPU個數(shù)為2,物理核數(shù)8個,邏輯核數(shù)16個;操作系統(tǒng)為Red Hat 6.2。

        集群模式 配置7個計算節(jié)點(diǎn),其中1個主節(jié)點(diǎn),6個副節(jié)點(diǎn),主節(jié)點(diǎn)配置32G內(nèi)存,其他和單節(jié)點(diǎn)模式配置相同,副節(jié)點(diǎn)配置全部和單節(jié)點(diǎn)模式配置相同。

        8.2 實(shí)驗(yàn)數(shù)據(jù)

        利用tpc-h工具[24]生成8組TPC-H相關(guān)數(shù)據(jù)集(每組包含8張表),數(shù)據(jù)量為(0.5,1,5,10,15,20,25,30),單位為Gigabytes。

        8.3 實(shí)驗(yàn)結(jié)果

        測試CEQR在單節(jié)點(diǎn)模式和集群模式下的效率。

        8.3.1 單節(jié)點(diǎn)模式

        在Oceanbase中實(shí)現(xiàn)postgresql的統(tǒng)計信息估計策略(簡稱PG)。目的為測試2種策略的統(tǒng)計信息收集效率,預(yù)期為CEQR收集效率高于PG。設(shè)置postgresql的樣本率為30%。使用TPC-H相關(guān)查詢Q4生成CEQR相關(guān)基數(shù)項(xiàng)。測試數(shù)據(jù)選取TPC-H中的ORDERS表,并保證CEQR和PG收集的數(shù)據(jù)量相同。測試結(jié)果如圖7。PG中基數(shù)由統(tǒng)計信息推導(dǎo)得到,涉及到表行數(shù),每列的不同值個數(shù)等統(tǒng)計信息的收集,需要進(jìn)行各種聚集運(yùn)算以及消耗數(shù)據(jù)掃描代價。而CEQR中基數(shù)來自SQL語句執(zhí)行過程中表的實(shí)際基數(shù),只需消耗基數(shù)計算的代價。因此CEQR收集效率優(yōu)于PG。圖7符合預(yù)期測試結(jié)果。

        圖7 單節(jié)點(diǎn)模式下CEQR和PG效率對比

        8.3.2 集群模式

        在Oceanbase中實(shí)現(xiàn)PDW QO中統(tǒng)計信息收集策略(簡稱PC)。PC利用SQL語句進(jìn)行局部并行收集,雖然在一定程度上提高了收集效率,但由于存在傾斜問題以及合并全局統(tǒng)計信息存在的網(wǎng)絡(luò)通信代價,因此預(yù)期數(shù)據(jù)量較大時,CEQR收集效率優(yōu)于PC。測試結(jié)果如圖8。

        圖8 集群模式下CEQR和PDW QO效率對比

        圖8中,當(dāng)數(shù)據(jù)量較小時,由于子表分散比較均勻并且數(shù)量較少,因此PC的收集效率較高,與CEQR基本相同。當(dāng)數(shù)據(jù)量較大時,由于負(fù)載不均衡以及網(wǎng)絡(luò)通信的增加,使PC效率低于CEQR。圖8符合預(yù)期測試結(jié)果。

        9 結(jié) 論

        基數(shù)估計在數(shù)據(jù)庫查詢優(yōu)化中占有重要地位,其效率以及準(zhǔn)確度關(guān)系最優(yōu)計劃的選擇。傳統(tǒng)基數(shù)估計策略中的統(tǒng)計信息或來自原數(shù)據(jù)或來自建立樣本,是一種推導(dǎo)、估計的過程,不能真實(shí)反映運(yùn)行時基本表以及中間結(jié)果實(shí)際基數(shù),嚴(yán)重影響優(yōu)化效果。論文提出一種基于查詢結(jié)果的基數(shù)估計策略,能夠在查詢執(zhí)行過程中保存準(zhǔn)確的運(yùn)行時基數(shù),并利用資源感知策略,提供快速的統(tǒng)計信息獲取以及維護(hù),在查詢量足夠的情況下,能夠大大提高基數(shù)估計的效率和準(zhǔn)確度。

        猜你喜歡
        謂詞基數(shù)數(shù)據(jù)量
        一次性傷殘就業(yè)補(bǔ)助金的工資基數(shù)應(yīng)如何計算?
        基于大數(shù)據(jù)量的初至層析成像算法優(yōu)化
        計算Lyapunov指數(shù)的模糊C均值聚類小數(shù)據(jù)量法
        被遮蔽的邏輯謂詞
        ——論胡好對邏輯謂詞的誤讀
        高刷新率不容易顯示器需求與接口標(biāo)準(zhǔn)帶寬
        黨項(xiàng)語謂詞前綴的分裂式
        西夏研究(2020年2期)2020-06-01 05:19:12
        寬帶信號采集與大數(shù)據(jù)量傳輸系統(tǒng)設(shè)計與研究
        電子制作(2019年13期)2020-01-14 03:15:18
        千萬不要亂翻番
        巧妙推算星期幾
        『基數(shù)』和『序數(shù)』
        久久国内精品自在自线图片| 少妇一区二区三区精选| 街拍丝袜美腿美女一区| 青青草亚洲视频社区在线播放观看 | 国产精品涩涩涩一区二区三区免费| 大又黄又粗又爽少妇毛片| 中文字幕av永久免费在线| 欧美黑人又大又粗xxxxx| 99精品一区二区三区无码吞精| 国产精品自产拍在线18禁| 亚洲av五月天天堂网| 熟女人妻一区二区三区| 精人妻无码一区二区三区| 女邻居的大乳中文字幕| 亚洲欧洲精品成人久久曰不卡 | 日本精品久久中文字幕| 精品日本一区二区三区| 亚洲爆乳精品无码一区二区三区| 中文字幕一区二区三区乱码| 国产资源精品一区二区免费| 亚洲av乱码一区二区三区观影| 性生大片免费观看性少妇| 人妻 偷拍 无码 中文字幕| 无码av免费一区二区三区| 国产一区二区三区精品久久呦| 日本高清一区二区三区色| 丝袜美腿av在线观看| 轻点好疼好大好爽视频| 精品爆乳一区二区三区无码av| 精品久久久久久99人妻| 国产亚洲3p一区二区| 国产a∨天天免费观看美女| 永久免费观看国产裸体美女| 欧美精品aaa久久久影院| 亚洲一区二区三区天堂av| 日韩av在线播放人妻| 久久久久久曰本av免费免费| 免费毛片在线视频| 精品少妇白浆一二三区| 与漂亮的女邻居少妇好爽| 窝窝午夜看片|