相關申請案交叉申請
本發(fā)明要求于2015年2月25日遞交的發(fā)明名稱為“適于并行數(shù)據(jù)庫系統(tǒng)的系統(tǒng)內存負載的查詢優(yōu)化”的第14/631,074號美國非臨時專利申請案的在先申請優(yōu)先權,所述在先申請的內容以引入的方式并入本文。
本發(fā)明大體涉及數(shù)據(jù)庫,更具體地,涉及基于系統(tǒng)內存負載而適應性地對并行數(shù)據(jù)庫查詢執(zhí)行計劃進行優(yōu)化。
背景技術:
數(shù)據(jù)庫系統(tǒng)用于存儲信息及關系數(shù)據(jù),所述關系數(shù)據(jù)可被查詢用來找出單個信息、相關信息或各條信息之間的關系。典型的并行數(shù)據(jù)庫系統(tǒng)包括一個協(xié)調器節(jié)點或多個協(xié)調器節(jié)點、以及通過網(wǎng)絡互連的多個數(shù)據(jù)處理節(jié)點。
一般而言,協(xié)調器節(jié)點形成系統(tǒng)的前端,所述前端通過同一網(wǎng)絡或另一網(wǎng)絡而與客戶端系統(tǒng)對接并與數(shù)據(jù)處理節(jié)點協(xié)調。通常,并行數(shù)據(jù)庫客戶端將查詢提交至協(xié)調節(jié)點或協(xié)調器,所述協(xié)調節(jié)點或協(xié)調器繼而將所述查詢派遣至數(shù)據(jù)節(jié)點進行執(zhí)行。
在一些現(xiàn)有的分布式并行數(shù)據(jù)庫系統(tǒng)(例如,大規(guī)模并行處理(massivelyparallelprocessing,簡稱mpp)數(shù)據(jù)庫系統(tǒng))中,多個協(xié)調器節(jié)點與多個數(shù)據(jù)節(jié)點一起形成計算系統(tǒng)集群。在分布式數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)庫的表通常被劃分成多個區(qū)段或被分區(qū),且所得的分區(qū)存在于所述集群的多個數(shù)據(jù)節(jié)點上。
一般而言,在傳統(tǒng)單節(jié)點非分布式關系數(shù)據(jù)庫管理系統(tǒng)及分布式關系數(shù)據(jù)庫管理系統(tǒng)中,當數(shù)據(jù)庫從客戶端接收到查詢(例如,結構化查詢語言(structuredquerylanguage,簡稱sql)查詢)時,數(shù)據(jù)庫系統(tǒng)編譯所述查詢,創(chuàng)建查詢執(zhí)行計劃,對所述查詢執(zhí)行計劃進行優(yōu)化,并執(zhí)行所述查詢執(zhí)行計劃。所述數(shù)據(jù)庫系統(tǒng)然后產生查詢結果,并將所述結果發(fā)回至客戶端。
在典型并行數(shù)據(jù)庫系統(tǒng)中,由協(xié)調器節(jié)點進行所述查詢計劃編譯及優(yōu)化,且所述查詢在所有節(jié)點上并行執(zhí)行。在接收到查詢時,協(xié)調器調用查詢編譯器來基于所述查詢創(chuàng)建語義樹。利用全局目錄中的聚合統(tǒng)計如同所述數(shù)據(jù)庫在單個計算機上運行般對所述查詢進行解析。協(xié)調器然后調用查詢規(guī)劃器,所述查詢規(guī)劃器處理所述語義樹,創(chuàng)建并比較所有可能的查詢執(zhí)行計劃,并輸出最優(yōu)查詢執(zhí)行計劃。
查詢計劃通常被再分片并針對系統(tǒng)中的分布式數(shù)據(jù)節(jié)點或數(shù)據(jù)分區(qū)的數(shù)目被并行化。一些查詢片段在協(xié)調器節(jié)點上執(zhí)行,而其他查詢片段在數(shù)據(jù)節(jié)點上執(zhí)行。因此,協(xié)調器將較后的查詢計劃片段發(fā)送至所述集群中的各種數(shù)據(jù)節(jié)點進行執(zhí)行。通常,協(xié)調器節(jié)點將相同的一個或多個查詢計劃片段遞送至每一單個數(shù)據(jù)節(jié)點,所有所述單個數(shù)據(jù)節(jié)點針對各種所存儲的數(shù)據(jù)分區(qū)而執(zhí)行相同的一個或多個查詢執(zhí)行計劃片段。
就任一特定的查詢而言,查詢規(guī)劃器考慮多個候選查詢執(zhí)行計劃,并行數(shù)據(jù)庫系統(tǒng)能夠處理所述多個候選查詢執(zhí)行計劃中的任一個并產生結果。舉例而言,典型的查詢執(zhí)行計劃由數(shù)據(jù)庫運算符(例如,聯(lián)接運算符、分類運算符及聚合運算符)組成。作為實例,就聯(lián)接運算符而言,存在不同的聯(lián)接算法,包括散列聯(lián)接、嵌套循環(huán)聯(lián)接及分類-合并聯(lián)接。
由于每一運算符具有不同的效率,因此即使所有的候選計劃均能夠確定恰當?shù)淖罱K查詢輸出,執(zhí)行每一計劃的成本仍存在很大變化。在對數(shù)據(jù)庫運算符的算法進行優(yōu)化時,查詢規(guī)劃器將例如內存及表分區(qū)統(tǒng)計等系統(tǒng)資源考慮在內。查詢規(guī)劃器對協(xié)調器節(jié)點的優(yōu)化器功能確定最優(yōu)計劃,例如在外部合并分類運算與快速分類運算之間作出選擇或在散列聯(lián)接運算與嵌套循環(huán)聯(lián)接運算之間作出決定。
在一些現(xiàn)有的解決方案中,工作內存的概念及當前可供查詢使用的系統(tǒng)內存區(qū)域或空間的量驅使確定出最優(yōu)執(zhí)行計劃。一般而言,現(xiàn)有的解決方案應用固定工作內存的概念來優(yōu)化查詢計劃,而未考慮不同數(shù)據(jù)節(jié)點隨時間的負載之間的差異。因此,所有的數(shù)據(jù)節(jié)點通常執(zhí)行同一計劃片段,所述同一計劃片段對每一數(shù)據(jù)節(jié)點而言并非總是最優(yōu)計劃。
因此,由于例如數(shù)據(jù)庫表分區(qū)在各種數(shù)據(jù)節(jié)點上的非均勻分布、及不同數(shù)據(jù)節(jié)點上的內存可用性隨時間的動態(tài)變化等因素,固定的工作內存配置有時會導致為數(shù)據(jù)節(jié)點選擇出非最優(yōu)查詢計劃。舉例而言,對于具有大量可用內存的系統(tǒng),若預定工作內存太小,則查詢規(guī)劃器為分類運算選擇外部分類,即使在所述情況下快速分類運算可為更高效的。
此類優(yōu)化錯誤可導致一般數(shù)據(jù)庫性能退化。因此,由于數(shù)據(jù)庫查詢性能具有相對較高的重要性,因而一些現(xiàn)有的查詢優(yōu)化方法在用于分布式并行數(shù)據(jù)庫系統(tǒng)中時可能存在缺陷。
技術實現(xiàn)要素:
根據(jù)一個一般方面,一種用于對分布于數(shù)據(jù)節(jié)點集群中的并行數(shù)據(jù)庫適應性地產生查詢執(zhí)行計劃的方法包括:從包括多個網(wǎng)絡設備的多個數(shù)據(jù)節(jié)點接收內存使用數(shù)據(jù);基于所述內存使用數(shù)據(jù)而計算對應于所述數(shù)據(jù)節(jié)點的代表性內存負載;基于所述所計算的代表性內存負載而對與所述數(shù)據(jù)節(jié)點對應的內存模式進行分類;基于所述內存模式而計算對應于所述數(shù)據(jù)節(jié)點的可用工作內存;基于所述可用工作內存而產生所述數(shù)據(jù)節(jié)點的所述查詢執(zhí)行計劃。所述內存使用數(shù)據(jù)是基于與所述數(shù)據(jù)節(jié)點相關聯(lián)的多個監(jiān)測單個內存負載,且所述查詢執(zhí)行計劃適于所述當前可用工作內存。
根據(jù)另一一般方面,一種用于對分布于數(shù)據(jù)節(jié)點集群中的并行數(shù)據(jù)庫適應性地產生查詢執(zhí)行計劃的設備包括單個數(shù)據(jù)節(jié)點,所述單個數(shù)據(jù)節(jié)點包括:單個網(wǎng)絡設備,與所述集群相關聯(lián)且用于存儲對應于所述數(shù)據(jù)庫的數(shù)據(jù)的至少一部分并用于接收查詢執(zhí)行計劃片段;內存負載監(jiān)測器,與所述單個數(shù)據(jù)節(jié)點相關聯(lián)且用于監(jiān)測與所述單個數(shù)據(jù)節(jié)點相關聯(lián)的內存負載;本地執(zhí)行引擎,用于執(zhí)行所述查詢執(zhí)行計劃片段。
在附圖及以下說明中闡述了本發(fā)明的一個或多個實施例的細節(jié)。通過所述說明及圖式以及權利要求書,本發(fā)明的其他特征、目標及優(yōu)點將顯而易見。
附圖說明
圖1是描繪一種用于對分布于數(shù)據(jù)節(jié)點集群中的并行數(shù)據(jù)庫適應性地產生查詢執(zhí)行計劃的系統(tǒng)的示意圖。
圖2是在用于對分布于數(shù)據(jù)節(jié)點集群中的并行數(shù)據(jù)庫適應性地產生查詢執(zhí)行計劃的系統(tǒng)中實現(xiàn)的示例性協(xié)調器設備的方框圖。
圖3是在用于對分布于數(shù)據(jù)節(jié)點集群中的并行數(shù)據(jù)庫適應性地產生查詢執(zhí)行計劃的系統(tǒng)中實現(xiàn)的示例性數(shù)據(jù)節(jié)點的方框圖。
圖4是代表一種用于對分布于數(shù)據(jù)節(jié)點集群中的并行數(shù)據(jù)庫適應性地產生查詢執(zhí)行計劃的方法的流程圖。
圖5是代表另一種用于對分布于數(shù)據(jù)節(jié)點集群中的并行數(shù)據(jù)庫適應性地產生查詢執(zhí)行計劃的方法的流程圖。
具體實施方式
本發(fā)明闡述一種用于分布式關系數(shù)據(jù)庫管理系統(tǒng)中的查詢計劃優(yōu)化策略,在所述查詢計劃優(yōu)化策略中,基于當前系統(tǒng)內存可用性而適應性地確定查詢執(zhí)行計劃。不同于如在現(xiàn)有技術中假設固定的工作內存配置,在本發(fā)明中所述的方法及設備持續(xù)地監(jiān)測與數(shù)據(jù)庫集群相關聯(lián)的分布式數(shù)據(jù)處理節(jié)點上的系統(tǒng)負載及內存可用性。
在一實施例中,協(xié)調器節(jié)點利用從每一數(shù)據(jù)節(jié)點上的內存負載監(jiān)測器接收的內存使用數(shù)據(jù)來確定全局工作內存配置,并產生針對在所述數(shù)據(jù)節(jié)點上可用的當前總工作內存而被優(yōu)化的查詢計劃。在一可選實施例中,每一數(shù)據(jù)節(jié)點根據(jù)在所述節(jié)點處監(jiān)測到的當前內存使用及可用性而確定本地工作內存配置,并針對在所述數(shù)據(jù)節(jié)點上可用的當前本地工作內存而修改所述查詢計劃或對所述查詢計劃進行再優(yōu)化。在前一實施例中,所述查詢計劃被調整以適應數(shù)據(jù)節(jié)點集群,而在后一實施例中,所述查詢計劃針對每一單個數(shù)據(jù)節(jié)點作出調整。
如圖1所示,用于對分布于數(shù)據(jù)節(jié)點集群中的并行數(shù)據(jù)庫適應性地產生查詢執(zhí)行計劃的系統(tǒng)10包括一對數(shù)據(jù)庫協(xié)調器節(jié)點或協(xié)調器12及14、以及分別具有三個存儲設備22、24及26的三個數(shù)據(jù)處理節(jié)點或數(shù)據(jù)節(jié)點16、18及20。在各種實施例中,存儲設備22、24及26集成至或外圍地連接至數(shù)據(jù)節(jié)點16、18及20。協(xié)調器節(jié)點12及14通過包括例如通信網(wǎng)絡的數(shù)據(jù)鏈路28及30而與每一數(shù)據(jù)節(jié)點互連。
在數(shù)據(jù)節(jié)點16、18及20處的存儲設備22、24及26各自存儲有分布式數(shù)據(jù)庫表的一個分區(qū)或多個分區(qū)。存儲設備22、24及26一起容納整個數(shù)據(jù)庫表的信息數(shù)據(jù)。
在運行時,協(xié)調器節(jié)點從客戶端節(jié)點或客戶端32接收查詢請求。舉例而言,仍參照圖1,協(xié)調器節(jié)點12從客戶端32接收查詢請求。作為響應,協(xié)調器12編譯所述查詢并創(chuàng)建查詢計劃。協(xié)調器12進一步將所述查詢計劃再分片并將所述查詢計劃片段通過數(shù)據(jù)鏈路28(例如,網(wǎng)絡)發(fā)送至數(shù)據(jù)節(jié)點16、18及20中的每一個,以供在數(shù)據(jù)節(jié)點16、18及20中的每一個上進行本地執(zhí)行。
由于工作環(huán)境包括例如數(shù)據(jù)傾斜或輸入/輸出(input/output,簡稱i/o)等因素,因此在各種數(shù)據(jù)節(jié)點16、18及20處的內存使用及可用性有時是不均勻的。在一實施例中,數(shù)據(jù)節(jié)點16、18及20中的每一個監(jiān)測在單個數(shù)據(jù)節(jié)點16、18及20處的內存使用,并將內存使用數(shù)據(jù)發(fā)送至協(xié)調器12及14中的每一個。協(xié)調器12及14使用來自所有數(shù)據(jù)節(jié)點16、18及20的內存使用數(shù)據(jù)來確定總工作內存,所述總工作內存代表當前在數(shù)據(jù)節(jié)點16、18及20中的每一個上可用的平均內存量,數(shù)據(jù)節(jié)點16、18及20將用于在數(shù)據(jù)節(jié)點16、18及20上本地執(zhí)行查詢計劃。協(xié)調器12及14對查詢計劃或查詢計劃片段進行優(yōu)化以在所有數(shù)據(jù)節(jié)點16、18及20上實現(xiàn)全局最優(yōu)執(zhí)行性能,并將相同的查詢計劃或查詢計劃片段發(fā)送至所有數(shù)據(jù)節(jié)點16、18及20。
類似地,在一可選實施例中,數(shù)據(jù)節(jié)點16、18及20中的每一個監(jiān)測在單個數(shù)據(jù)節(jié)點16、18及20處的內存使用。然而,單個數(shù)據(jù)節(jié)點16、18及20中的每一個確定指示當前在單個數(shù)據(jù)節(jié)點16、18及20上可用的內存量的本地工作內存,數(shù)據(jù)節(jié)點16、18及20將用于在數(shù)據(jù)節(jié)點16、18及20上本地執(zhí)行查詢計劃。單個數(shù)據(jù)節(jié)點16、18及20中的每一個進一步實行本地化查詢計劃以適應性地改編從協(xié)調器12及14中的每一個接收的查詢計劃片段,以在單個數(shù)據(jù)節(jié)點16、18及20上實現(xiàn)最優(yōu)執(zhí)行性能。
這些實現(xiàn)方式相對于現(xiàn)有的解決方案提供了優(yōu)點,所述現(xiàn)有的解決方案通常不將數(shù)據(jù)節(jié)點中的實際系統(tǒng)負載或內存使用及可用性變化考慮在內,而是假設固定的工作內存。通過確定更為準確的工作內存而非假設預定值,在本發(fā)明中闡述的實現(xiàn)方式可產生被動態(tài)地調整以適應數(shù)據(jù)節(jié)點的實際工作環(huán)境的更為高效的查詢計劃,且因此提高分布式并行數(shù)據(jù)庫系統(tǒng)的整體性能。
參照圖2,在圖1所示系統(tǒng)10中實現(xiàn)的協(xié)調器節(jié)點或協(xié)調器40包括查詢編譯器42、可選的全局內存負載計算器44、可選的全局內存模式分類器46、可選的全局工作內存計算器48、全局查詢規(guī)劃器50、全局執(zhí)行引擎52、內存54及處理器56,上述所有組件通過數(shù)據(jù)鏈路58互連。協(xié)調器40用于從客戶端接收查詢請求,例如(structuredquerylanguage,簡稱sql)查詢請求。在圖2中以短劃線示出的組件是并非包括于所有實現(xiàn)方式中的可選項。
查詢編譯器42用于解析所接收的查詢請求,并創(chuàng)建對應于所述查詢請求的語義樹。全局內存負載計算器44視情況利用從所有數(shù)據(jù)節(jié)點接收的內存使用數(shù)據(jù)來計算全局內存負載,所述全局內存負載例如代表形成所述集群的數(shù)據(jù)節(jié)點上的平均當前內存負載。
全局內存模式分類器46視情況指定全局類別或模式,所述全局類別或模式指示形成所述集群的數(shù)據(jù)節(jié)點中的當前內存使用或可用性的近似水平。在一些實現(xiàn)方式中,全局內存模式分類器46根據(jù)在整個系統(tǒng)中當前全局內存負載的輕重而將數(shù)據(jù)節(jié)點中的當前平均內存負載映射至三個類別(例如,輕、正常、及重)中的一個。
舉例而言,全局內存模式分類器46在所有數(shù)據(jù)節(jié)點中的平均內存使用低于總系統(tǒng)內存容量的百分之三十(30%)時指定輕模式,在所有數(shù)據(jù)節(jié)點中的平均內存使用介于總系統(tǒng)內存容量的百分之三十(30%)與百分之七十(70%)之間時指定正常模式,并在所有數(shù)據(jù)節(jié)點中的平均內存使用高于總系統(tǒng)內存容量的百分之七十(70%)時指定重模式。
基于當前指定的內存模式,全局工作內存計算器48視情況計算當前全局工作內存,以用于對查詢計劃進行優(yōu)化。當前全局工作內存對應于在形成所述集群的數(shù)據(jù)節(jié)點中的每一個上可用的平均內存空間。舉例而言,在一些實現(xiàn)方式中,全局工作內存計算器48利用對應于當前內存模式或類別的內存負載因數(shù)來根據(jù)以下公式計算可用全局工作內存:
work_memory=system_memory_for_query×memory_load_factor
其中
利用以下定義來確定內存負載因數(shù):
此外,存在以下定義:
system_memory_for_query可用于針對每一連接查詢操作的內存量;
system_memory是單個數(shù)據(jù)節(jié)點上的總內存量;
memory_for_bufferpool是當前用于緩沖池的內存量;
other_memory_overhead是當前用于日志文件高速緩沖、線程創(chuàng)建等的內存量;
connection_number是至數(shù)據(jù)庫的連接的近期平均數(shù)目。
因此,當內存模式為輕時,基于適合于進行內存相對密集型運算(例如,建立散列表或分類運算)的較大工作內存來產生查詢計劃。此可為可取的,因為盡管以較大工作內存計算的查詢執(zhí)行計劃有可能消耗較多內存資源,但查詢計劃通常將以較快的響應速度執(zhí)行。相反,當內存模式為重時,基于較小的工作內存而計算查詢計劃。
另一方面,當內存模式為正常時,基于查詢的一或多個特征來區(qū)分查詢。也不是說,更有可能為內存相對密集型的查詢將被指定較大的工作內存進行查詢計劃,而為內存相對密集型的機會較小的查詢將被指定較小的工作內存進行查詢計劃。相應地,優(yōu)化器基于當前內存負載情況而適應性地對查詢進行計劃,從而實現(xiàn)動態(tài)內存利用及更好的執(zhí)行性能。
全局查詢規(guī)劃器50創(chuàng)建多個替代候選查詢計劃,并利用所計算的全局工作內存來確定最優(yōu)計劃。選擇的查詢計劃通常相對于固定的工作內存解決方案而提高查詢執(zhí)行性能,因為所計算的全局工作內存更準確地反映當前在分布式數(shù)據(jù)節(jié)點上可用的系統(tǒng)資源。
全局查詢規(guī)劃器50進一步將查詢計劃劃分成多個將被轉發(fā)至數(shù)據(jù)節(jié)點的片段,然后將經(jīng)優(yōu)化查詢計劃片段中的一個或多個發(fā)送至每一數(shù)據(jù)節(jié)點以在所述數(shù)據(jù)節(jié)點上本地執(zhí)行。全局執(zhí)行引擎在協(xié)調器節(jié)點40上執(zhí)行查詢計劃片段的一些部分。
referringtofig.參照圖3,在圖1所示系統(tǒng)10中實現(xiàn)的數(shù)據(jù)處理節(jié)點或數(shù)據(jù)節(jié)點60包括內存負載監(jiān)測器62、可選的本地內存模式分類器64、可選的本地工作內存計算器66、可選的本地查詢規(guī)劃器68、本地執(zhí)行引擎70、內存72及處理器76,上述所有組件通過數(shù)據(jù)鏈路76互連。數(shù)據(jù)節(jié)點60用于從協(xié)調器節(jié)點中的一個接收一個或多個查詢執(zhí)行計劃片段。在圖2中以短劃線示出的組件是并非包括于所有實現(xiàn)方式中的可選項。
內存負載監(jiān)測器62監(jiān)測數(shù)據(jù)節(jié)點60中的系統(tǒng)內存使用及可用性。在一實現(xiàn)方式中,數(shù)據(jù)節(jié)點60將內存使用及可用性信息周期性地發(fā)送至所有協(xié)調器節(jié)點。如以上參照圖2所闡述,協(xié)調器利用內存使用及可用性數(shù)據(jù)來計算數(shù)據(jù)庫集群中的所有數(shù)據(jù)節(jié)點的平均內存負載,并將所述內存負載映射至內存模式。協(xié)調器還如上所述計算工作內存,并為所有數(shù)據(jù)節(jié)點產生查詢計劃。
在可選實現(xiàn)方式中,再次參照圖3,本地內存模式分類器64視情況指定本地類別或模式,所述本地類別或模式指示數(shù)據(jù)節(jié)點60上的當前內存使用或可用性的近似水平。在一些實現(xiàn)方式中,本地內存模式分類器64根據(jù)數(shù)據(jù)節(jié)點60處的當前本地內存負載的輕重而將數(shù)據(jù)節(jié)點60的當前內存負載映射至三個類別(例如,輕、正常、及重)中的一個。
舉例而言,本地內存模式分類器64在數(shù)據(jù)節(jié)點60上的內存使用低于數(shù)據(jù)節(jié)點60內存容量的百分之三十(30%)時指定輕模式,在數(shù)據(jù)節(jié)點60上的內存使用介于數(shù)據(jù)節(jié)點60內存容量的百分之三十(30%)與百分之七十(70%)之間時指定正常模式,并在數(shù)據(jù)節(jié)點60上的內存使用高于數(shù)據(jù)節(jié)點60內存容量的百分之七十(70%)時指定重模式。
基于當前指定的本地內存模式,本地工作內存計算器66視情況計算當前本地工作內存,以用于使計劃片段適應數(shù)據(jù)節(jié)點60處的當前工作環(huán)境。當前本地工作內存對應于在數(shù)據(jù)節(jié)點60上可用的內存空間。舉例而言,在一些實現(xiàn)方式中,本地工作內存計算器66利用對應于當前內存模式或類別的內存負載因數(shù)來根據(jù)以下公式計算可用本地工作內存:
work_memory=system_memory_for_query×memory_load_factor
其中
利用以下定義來確定內存負載因數(shù):
此外,存在以下定義:
system_memory_for_query是可用于針對每一連接查詢操作的內存量;
system_memory是數(shù)據(jù)節(jié)點60上的內存量;
memory_for_bufferpool是當前用于緩沖池的內存量;
other_memory_overhead是當前用于日志文件高速緩沖、線程創(chuàng)建等的內存量;
connection_number是至數(shù)據(jù)庫的連接的近期平均數(shù)目。
本地查詢規(guī)劃器68利用所計算的本地工作內存來修改或再優(yōu)化一個或多個查詢執(zhí)行計劃片段,以使所述一個或多個計劃片段適應當前本地工作環(huán)境。經(jīng)修改或經(jīng)再優(yōu)化的查詢計劃片段通常相對于固定的工作內存解決方案而提高查詢執(zhí)行性能,因為所計算的本地工作內存更準確地反映當前在數(shù)據(jù)節(jié)點60上可用的系統(tǒng)資源。在任一實施例中,本地執(zhí)行引擎70在數(shù)據(jù)節(jié)點60上執(zhí)行一個或多個查詢執(zhí)行計劃片段。
參照圖1至圖3,協(xié)調器節(jié)點12、14及40以及數(shù)據(jù)處理節(jié)點16、18、40及60包括一般計算設備,且內存54及42以及處理器56及54是一般計算設備(例如,個人計算機(personalcomputer,簡稱pc)、工作站、服務器、大型計算器等)的不可缺少的組件。耦合至一般計算設備的外圍組件還包括存儲于計算機可讀取介質上可被加載至內存54及52中并由處理器56及54執(zhí)行的編程代碼(例如,源代碼、目標代碼或可執(zhí)行代碼),以實行系統(tǒng)10的功能。
因此,在各種實施例中,系統(tǒng)10的功能在例如以下任何適當?shù)奶幚砥魃蠄?zhí)行:服務器、大型計算機、工作站、個人計算機(例如包括筆記本或平板計算機、pda、一系列聯(lián)網(wǎng)服務器或個人計算機等)。此外,隨著開發(fā)出系統(tǒng)10的經(jīng)修改或經(jīng)改良版本以例如修訂或添加模板或國別信息,與處理器相關聯(lián)的軟件得到更新。
在各種實施例中,系統(tǒng)10耦合至通信網(wǎng)絡,所述通信網(wǎng)絡可包括能夠鏈接基于計算機的系統(tǒng)的設備與系統(tǒng)的任意可行組合,例如互聯(lián)網(wǎng)、內聯(lián)網(wǎng)或外聯(lián)網(wǎng)、局域網(wǎng)(localareanetwork,簡稱lan)、廣域網(wǎng)(wideareanetwork,簡稱wan)、直接電纜連接、專用網(wǎng)絡、公用網(wǎng)絡、基于以太網(wǎng)的系統(tǒng)、令牌環(huán)、增值網(wǎng)絡、基于電話的系統(tǒng)(例如包括t1設備或e1設備)、異步傳輸模式(asynchronoustransfermode,簡稱atm)網(wǎng)絡、有線系統(tǒng)、無線系統(tǒng)、光系統(tǒng)、任意數(shù)目的分布式處理網(wǎng)絡或系統(tǒng)的組合等。
系統(tǒng)10通過本地數(shù)據(jù)鏈路58及56耦合至通信網(wǎng)絡,所述通信網(wǎng)絡在各種實施例中包含用于耦合基于處理器的系統(tǒng)的設備的任意組合以及任意相關聯(lián)軟件或固件,例如調制解調器、接入點、網(wǎng)絡接口卡、串行總線、并行總線、lan接口或wan接口、無線接口或光接口等,以及設計所期望或需要的任何相關聯(lián)的傳輸協(xié)定。
本發(fā)明的實施例例如通過交互式、菜單驅動式、基于視覺顯示的用戶接口或圖形用戶接口(graphicaluserinterface,簡稱gui)將信息傳送至用戶并請求用戶輸入。用戶接口例如在個人計算機(personalcomputer,簡稱pc)或具有鼠標及鍵盤的終端上執(zhí)行,用戶利用對圖形用戶接口的直接操控通過所述個人計算機或終端交互地輸入信息。直接操控可包括使用定點設備(例如,鼠標或手寫筆)而從各種視窗、圖標及可選擇字段(包括可選擇菜單、下拉式菜單、頁簽、按鈕、項目符號、復選框、文本框等)進行選擇。然而,本發(fā)明的各種實施例包含任意數(shù)目的額外功能性用戶接口方案來代替此接口方案,使用或不使用鼠標或按鈕或鍵,包括例如追蹤球、觸摸屏或聲控系統(tǒng)。
在圖1所示系統(tǒng)10的示例性實現(xiàn)方式中,協(xié)調器節(jié)點12及14包括查詢編譯器42、全局內存負載計算器44、全局內存模式分類器46、全局工作內存計算器48、全局查詢規(guī)劃器50、全局執(zhí)行引擎52、內存54及處理器56,而數(shù)據(jù)處理節(jié)點16、18及20包括內存負載監(jiān)測器62、本地執(zhí)行引擎70、內存72及處理器74。數(shù)據(jù)節(jié)點16、18及20將在數(shù)據(jù)節(jié)點16、18及20處監(jiān)測到的內存使用數(shù)據(jù)周期性地發(fā)送至所有協(xié)調器節(jié)點12及14,且協(xié)調器節(jié)點12及14計算平均內存負載及全局工作內存,并產生和優(yōu)化查詢執(zhí)行計劃片段,所述查詢執(zhí)行計劃片段將被發(fā)送至數(shù)據(jù)節(jié)點16、18及20中的每一個并在數(shù)據(jù)節(jié)點16、18及20中的每一個上執(zhí)行。
舉例而言,與圖1所示數(shù)據(jù)節(jié)點16、18及20中的每一個相關聯(lián)的內存負載監(jiān)測器在特定時間點確定出數(shù)據(jù)節(jié)點16、18及20當前分別以近似百分之九十(90%)、百分之二十五(25%)及百分之五十(50%)運行。數(shù)據(jù)節(jié)點16、18及20隨后將此信息遞送至協(xié)調器節(jié)點12及14。然后,當協(xié)調器節(jié)點12及14中的一個(例如,協(xié)調器12)對已在協(xié)調器12處接收的查詢請求進行處理時,協(xié)調器12計算出系統(tǒng)的平均內存負載為百分之五十五(55%),并將當前內存模式指定至正常類別。協(xié)調器12還根據(jù)所述正常內存模式而計算數(shù)據(jù)節(jié)點的可用全局工作內存,并鑒于當前工作環(huán)境為所有數(shù)據(jù)節(jié)點產生相同的經(jīng)優(yōu)化計劃片段。
在圖1所示系統(tǒng)10的可選實現(xiàn)方式中,協(xié)調器節(jié)點12及14包括查詢編譯器42、全局查詢規(guī)劃器50、全局執(zhí)行引擎52、內存54及處理器56,而數(shù)據(jù)處理節(jié)點16、18及20包括內存負載監(jiān)測器62、本地內存模式分類器64、本地工作內存計算器66、本地查詢規(guī)劃器68、本地執(zhí)行引擎70、內存72及處理器74。協(xié)調器節(jié)點12及14產生全局查詢執(zhí)行計劃片段并將所述全局查詢執(zhí)行計劃片段發(fā)送至所有的數(shù)據(jù)節(jié)點16、18及20。數(shù)據(jù)節(jié)點16、18及20監(jiān)測單個數(shù)據(jù)節(jié)點16、18及20處的內存使用,計算本地工作內存,并對查詢執(zhí)行計劃片段進行修改或優(yōu)化以供在單個數(shù)據(jù)節(jié)點16、18及20上執(zhí)行。
舉例而言,與圖1所示數(shù)據(jù)節(jié)點16、18及20中的每一個相關聯(lián)的內存負載監(jiān)測器在特定時間點確定出數(shù)據(jù)節(jié)點16、18及20當前分別以近似百分之九十(90%)、百分之二十五(25%)及百分之五十(50%)運行。數(shù)據(jù)節(jié)點16、18及20隨后從協(xié)調器節(jié)點12及14中的一個接收查詢執(zhí)行計劃片段。數(shù)據(jù)節(jié)點16將當前本地內存模式指定為重類別,數(shù)據(jù)節(jié)點18將當前本地內存模式指定為輕類別,且數(shù)據(jù)節(jié)點20將當前本地內存模式指定為正常類別。數(shù)據(jù)節(jié)點16、18及20中的每一個還分別根據(jù)重內存模式、輕內存模式及正常內存模式來計算可用本地工作內存,并鑒于對應單個數(shù)據(jù)節(jié)點16、18及20處的當前工作環(huán)境并行地針對單個數(shù)據(jù)節(jié)點16、18及20中的每一個對查詢計劃片段進行再優(yōu)化。因此,在數(shù)據(jù)節(jié)點16、18及20中的每一個處執(zhí)行的查詢計劃片段不同。
在一示例性實施例中,一種用于對分布于數(shù)據(jù)節(jié)點集群中的并行數(shù)據(jù)庫適應性地產生查詢執(zhí)行計劃的設備包括:接收模塊,通過處理器從包括多個網(wǎng)絡設備的多個數(shù)據(jù)節(jié)點接收內存使用數(shù)據(jù);內存負載模塊,基于所述內存使用數(shù)據(jù)而計算對應于所述數(shù)據(jù)節(jié)點的代表性內存負載;內存模式模塊,基于所述所計算的代表性內存負載而對與所述數(shù)據(jù)節(jié)點對應的內存模式進行分類;工作內存模塊,基于所述內存模式而計算對應于所述數(shù)據(jù)節(jié)點的可用工作內存;查詢執(zhí)行模塊,基于所述可用工作內存而產生所述數(shù)據(jù)節(jié)點的所述查詢執(zhí)行計劃,其中所述內存使用數(shù)據(jù)是根據(jù)與所述數(shù)據(jù)節(jié)點相關聯(lián)的多個監(jiān)測單個內存負載而確定,且所述查詢執(zhí)行計劃對應于所述當前可用工作內存。在一些實施例中,所述設備可包括用于執(zhí)行在所述實施例中闡述的任一步驟或步驟的組合的其他或額外模塊。
在一示例性實施例中,一種用于對分布于數(shù)據(jù)節(jié)點集群中的并行數(shù)據(jù)庫適應性地產生查詢執(zhí)行計劃的設備包括:內存負載模塊,通過處理器監(jiān)測與包括網(wǎng)絡設備的數(shù)據(jù)節(jié)點相關聯(lián)的內存負載;內存模式模塊,基于所述內存負載而對與所述數(shù)據(jù)節(jié)點對應的內存模式進行分類;工作內存模塊,基于所述內存模式而計算對應于所述數(shù)據(jù)節(jié)點的可用工作內存;查詢計劃接收模塊,接收查詢執(zhí)行計劃片段;查詢計劃改編模塊,基于所述可用工作內存而針對所述數(shù)據(jù)節(jié)點適應性地改編所述查詢執(zhí)行計劃片段,其中所述數(shù)據(jù)節(jié)點與所述集群相關聯(lián)且所述查詢執(zhí)行計劃片段對應于所述當前可用工作內存。在一些實施例中,所述設備可包括用于執(zhí)行在所述實施例中闡述的任一步驟或步驟的組合的其他或額外模塊。
現(xiàn)在參照圖4,示出了一種流程圖,所示流程圖例如由圖2所示協(xié)調器節(jié)點40實行以實現(xiàn)在本發(fā)明中闡述的用于對分布于數(shù)據(jù)節(jié)點集群中的并行數(shù)據(jù)庫適應性地產生查詢執(zhí)行計劃的方法。在圖4中以短劃線示出的方塊是并非在所有實現(xiàn)方式中實行的可選動作或事件。所示過程開始于方塊80處,在方塊80處,例如從客戶端節(jié)點接收查詢請求(例如,結構化查詢語言(structuredquerylanguage,簡稱sql)查詢)。
在方塊82中,對所接收的查詢進行解析,且在方塊84中,編譯對應于所述查詢的語義樹。在方塊86中,基于所述語義樹而創(chuàng)建多個候選查詢執(zhí)行計劃。在方塊88中,接收關于單個數(shù)據(jù)節(jié)點的當前內存使用或可用性信息,且在方塊90中,如上所述利用所接收的內存使用或可用性數(shù)據(jù)來計算當前全局內存負載。在方塊92中,如上所述對應于當前全局內存負載而將內存模式指定至恰當?shù)念悇e。在方塊94中,如上所述計算可用全局工作內存,且在方塊96中,如上所述使用所述可用全局工作內存來對選自候選計劃中的查詢執(zhí)行計劃進行優(yōu)化。
在方塊98中,將查詢執(zhí)行計劃劃分成多個片段以分布至所述數(shù)據(jù)節(jié)點,且在方塊100處,將相同的一個或多個查詢執(zhí)行計劃片段傳送至數(shù)據(jù)庫集群中的所有數(shù)據(jù)節(jié)點。此外,在方塊102處,將編譯的語義樹轉發(fā)至數(shù)據(jù)節(jié)點。
現(xiàn)在參照圖5,示出了一種流程圖,所示流程圖例如由圖3所示數(shù)據(jù)處理節(jié)點60實行以實現(xiàn)在本發(fā)明中闡述的用于對分布于數(shù)據(jù)節(jié)點集群中的并行數(shù)據(jù)庫適應性地產生查詢執(zhí)行計劃的方法。在圖5中以短劃線示出的方塊是在所有實現(xiàn)方式中實行的可選動作或事件。所述過程開始于方塊110處,在方塊110處,接收一個或多個查詢執(zhí)行計劃片段。在方塊112中,也接收經(jīng)編譯的語義樹。
在方塊114中,監(jiān)測單個數(shù)據(jù)節(jié)點的當前內存使用或可用性。可選地,在方塊116中,將內存使用或可用性信息周期性地發(fā)送至所有協(xié)調器節(jié)點。在方塊118中,如上所述視情況對應于當前內存使用或可用性將本地內存模式指定至類別。
在方塊120中,如上所述計算可用本地工作內存,且在方塊122中,如上所述使用所述可用本地工作內存來修改一個或多個查詢執(zhí)行計劃片段或對所述一個或多個查詢執(zhí)行計劃片段進行再優(yōu)化。在方塊124處,在數(shù)據(jù)節(jié)點上執(zhí)行所述一個或多個查詢執(zhí)行片段。
在圖1所示系統(tǒng)10的示例性實現(xiàn)方式中,協(xié)調器節(jié)點12及14實行在圖4所示方塊80至102中闡述的動作或事件,而數(shù)據(jù)節(jié)點16、18及20實行在圖5所示方塊112、114、116及124中闡述的動作或事件。因此,根據(jù)在所有數(shù)據(jù)節(jié)點中被動態(tài)確定的全局工作內存配置而進行優(yōu)化的相同的一個或多個查詢執(zhí)行計劃片段被發(fā)送至所述集群中的所有數(shù)據(jù)節(jié)點。
在圖1所示系統(tǒng)10的可選實現(xiàn)方式中,協(xié)調器節(jié)點12及14實行在圖4所示方塊80至86、以及方塊96至100中闡述的動作或事件,而數(shù)據(jù)節(jié)點16、18及20實行在圖5所示方塊110至114、以及方塊118至124中闡述的動作或事件。因此,整個所述集群中的每一數(shù)據(jù)節(jié)點單個地利用對應于每一單個數(shù)據(jù)節(jié)點的被動態(tài)確定的本地工作內存配置來并行地對一個或多個查詢執(zhí)行計劃片段進行再優(yōu)化。
舉例而言,由圖1所示協(xié)調器節(jié)點12及14中的一個(例如,協(xié)調器12)接收以下查詢請求:
selectcount(*)fromlineitem,partwherel_partkey=p_partkeygroupbyl_partkey;
作為響應,協(xié)調器12產生以下查詢執(zhí)行計劃片段并將所述片段發(fā)送至圖1所示的三個數(shù)據(jù)節(jié)點16、18及20:
查詢計劃
查詢計劃片段的前三行在協(xié)調器12上執(zhí)行,而聚合運算及聯(lián)接運算根據(jù)鑒于在對應單個數(shù)據(jù)節(jié)點16、18及20處的當前工作環(huán)境被指定至數(shù)據(jù)節(jié)點16、18及20中的每一個的當前本地內存模式類別而在數(shù)據(jù)節(jié)點16、18及20中的每一個上執(zhí)行。因此,舉例而言,若數(shù)據(jù)節(jié)點16的本地內存模式當前被指定至重類別,則數(shù)據(jù)節(jié)點16對查詢計劃進行再優(yōu)化以進行基于分類的聚合運算及嵌套循環(huán)聯(lián)接運算。同時,若數(shù)據(jù)節(jié)點18及數(shù)據(jù)節(jié)點20的本地內存模式當前分別被指定至輕類別及正常類別,則數(shù)據(jù)節(jié)點18及數(shù)據(jù)節(jié)點20各自對查詢計劃進行再優(yōu)化以進行散列聚合運算及散列聯(lián)接運算。
使用在本發(fā)明中闡述的、實現(xiàn)反映當前系統(tǒng)負載的經(jīng)動態(tài)計算的工作內存配置的適應性查詢計劃方法會相對于使用固定工作內存配置的解決方案提高查詢執(zhí)行效率或性能。通過使用更為準確的工作內存配置而非使用預定的或固定的值,適應性查詢規(guī)劃器可產生被調整以適應數(shù)據(jù)節(jié)點處的當前工作環(huán)境的經(jīng)修改或經(jīng)優(yōu)化的查詢計劃,從而提高分布式并行數(shù)據(jù)庫系統(tǒng)的性能、減少查詢響應時間、提高內存資源利用并減少數(shù)據(jù)溢出。
本文中參照流程圖或方框圖闡述了本發(fā)明的各方面,在所述流程圖或方框圖中每一方塊或方塊的任意組合可由計算機程序指令實現(xiàn)。所述指令被提供至通用計算機、專用計算機或其他可編程數(shù)據(jù)處理裝置的處理器以實現(xiàn)機器或制品,且當所述指令被處理器執(zhí)行時,所述指令創(chuàng)建用于實現(xiàn)在所述圖式中每一方塊或方塊的組合中規(guī)定的功能、動作或事件的方式。
就此而言,流程圖或方框圖中的每一方塊對應于包括用于實現(xiàn)所規(guī)定的邏輯功能的一個或多個可執(zhí)行指令的代碼的模塊、片段或一部分。還應說明的是,在一些可選實現(xiàn)方式中,與任一方塊相關聯(lián)的功能可不按圖中所提及的次序發(fā)生。舉例而言,連續(xù)示出的兩個方塊事實上可實質上同時執(zhí)行,或者方塊有時可以相反的次序執(zhí)行。
本領域的普通技術人員的人員將會理解,本發(fā)明的各方面可以體現(xiàn)為設備、系統(tǒng)、方法或計算機程序產品。相應地,本發(fā)明的一般在本文中被稱為電路、模塊、組件或系統(tǒng)的各方面可以硬件、軟件(包括固件、常駐軟件、微代碼等)或軟件與硬件的任意組合(包括實施于計算機可讀取介質中的計算機程序產品,所述計算機可讀取介質上實施有計算機可讀取程序代碼)實施。
在這方面,可以利用一個或多個計算機可讀介質的任何組合,包括但不限于:電子、磁、光、電磁、紅外線、或半導體系統(tǒng),裝置或設備,或上述的任意合適組合。計算機可讀存儲介質的更具體的例子包括以下的非詳盡列表:便攜式計算機磁盤、硬盤、隨機存取存儲器(randomaccessmemory,簡稱ram)、只讀存儲器(read-onlymemory,簡稱rom)、可擦除可編程只讀存儲器(erasableprogrammableread-onlymemory,簡稱eprom)、閃存、便攜式光盤只讀只讀存儲器(compactdiscread-onlymemory,簡稱cd-rom)、光存儲設備,網(wǎng)絡連接存儲(network-attachedstorage,簡稱nas)、存儲區(qū)域網(wǎng)絡(storageareanetwork,簡稱san)、磁帶或上述的任意合適組合。在本發(fā)明的上下文中,計算機可讀存儲介質可包括能夠包含或存儲被數(shù)據(jù)處理系統(tǒng)、裝置或設備使用或與其相關的程序指令的任何有形介質。
可以用一個或多個編程語言的任意組合來寫用于實現(xiàn)與本發(fā)明的各方面的操作的計算機程序代碼,包括如java、smalltalk或c++等面向對象的程序設計語言,以及如“c”、fortran、cobol或pascal等傳統(tǒng)過程化編程語言。程序代碼可以在單個個人計算機上完全執(zhí)行,作為一個獨立的軟件包,部分在客戶端計算機上部分在遠程服務器計算機上,或完全在遠程服務器或計算機上,或完全在分布式計算機節(jié)點的群集上。一般情況下,遠程計算機、服務器或分布式計算機節(jié)點的群集可以通過任何類型的網(wǎng)絡連接到個人(用戶)計算機,包括一個局域網(wǎng)(localareanetwork,簡稱lan)、廣域網(wǎng)(wideareanetwork,簡稱wan)、互聯(lián)網(wǎng)接入點或其任意組合。
可以理解的是可以進行各種修改。例如,如果所公開的技術的步驟以不同的順序進行,和/或如果所公開的系統(tǒng)中的組件以不同的方式合并,和/或由其他組件代替或補充,有用的結果仍可能會實現(xiàn)。相應地,其他實現(xiàn)方式在以下權利要求的保護范圍之內。