系統(tǒng)級查詢優(yōu)化的制作方法
【專利說明】系統(tǒng)級查詢優(yōu)化
[0001]相關(guān)申請的交叉引用
[0002]本申請主張2012年11月30日申請的美國專利申請第13/691,213號的權(quán)利,其公開以引用的方式完整并入本文中。
【背景技術(shù)】
[0003]通常期望使用許多小型計(jì)算機(jī)而非具有多個(gè)處理器及大型內(nèi)存條的單個(gè)服務(wù)器來實(shí)施大型數(shù)據(jù)庫。這些小型計(jì)算機(jī)通常被描述為商用硬件,這是因?yàn)榕c最強(qiáng)大的服務(wù)器相比,它們相對便宜、容易獲得且易于更換。但是,盡管使用商用硬件存在優(yōu)勢,但是創(chuàng)建可擴(kuò)展且高效的大型數(shù)據(jù)庫仍是一大挑戰(zhàn)性嘗試。
[0004]一種用于在商用硬件上實(shí)施大型數(shù)據(jù)庫系統(tǒng)的技術(shù)涉及利用碎片。一般地說,碎片是負(fù)責(zé)解決較大計(jì)算問題的一小部分的計(jì)算系統(tǒng)。例如,當(dāng)在大規(guī)模數(shù)據(jù)管理系統(tǒng)中使用碎片時(shí),可將表按行劃分為所謂的水平分區(qū)。每個(gè)碎片管理一個(gè)分區(qū)且響應(yīng)涉及所述分區(qū)的請求和命令。這種方法可減小成本且在與傳統(tǒng)數(shù)據(jù)庫系統(tǒng)相比時(shí)具有更好的性能。
[0005]但是,基于碎片的系統(tǒng)可能難以優(yōu)化。每個(gè)碎片可包括獨(dú)立的數(shù)據(jù)管理系統(tǒng),其具有查詢優(yōu)化器,所述查詢優(yōu)化器能夠針對在所述碎片上運(yùn)行的查詢產(chǎn)生執(zhí)行計(jì)劃。雖然執(zhí)行計(jì)劃可能被本地優(yōu)化用于在所述碎片上執(zhí)行,但是它無需跨所有碎片優(yōu)化。由于性能特性和每個(gè)碎片管理的數(shù)據(jù)的差異,在一個(gè)碎片上高效運(yùn)行的計(jì)劃可能在另一個(gè)碎片上運(yùn)行欠佳。
【附圖說明】
[0006]圖1描繪利用全局查詢優(yōu)化的基于碎片的系統(tǒng)的實(shí)施方案。
[0007]圖2描繪用于使用領(lǐng)導(dǎo)者(leader)委任和比較選擇全局優(yōu)化執(zhí)行計(jì)劃的實(shí)施方案。
[0008]圖3描繪用于通過循序評估選擇全局優(yōu)化執(zhí)行計(jì)劃的實(shí)施方案。
[0009]圖4描繪用于通過投票過程選擇全局優(yōu)化執(zhí)行計(jì)劃的實(shí)施方案。
[0010]圖5描繪用于通過中央機(jī)構(gòu)(central authority)選擇全局優(yōu)化執(zhí)行計(jì)劃的實(shí)施方案。
[0011]圖6描繪用于傳達(dá)執(zhí)行計(jì)劃信息用于比較的數(shù)據(jù)結(jié)構(gòu)的實(shí)施方案。
[0012]圖7描繪用于傳達(dá)足以允許執(zhí)行計(jì)劃被執(zhí)行引擎使用的執(zhí)行計(jì)劃信息的數(shù)據(jù)結(jié)構(gòu)的實(shí)施方案。
[0013]圖8描繪使用成本調(diào)整的成本比較的實(shí)施方案。
[0014]圖9描繪使用執(zhí)行計(jì)劃中步驟的個(gè)別調(diào)整的成本比較的實(shí)施方案。
[0015]圖10描繪使用提示來修改查詢,使得所得執(zhí)行計(jì)劃符合期望的全局優(yōu)化執(zhí)行計(jì)劃的實(shí)施方案。
[0016]圖11描繪使用用于結(jié)合具有執(zhí)行引擎和本地優(yōu)化器的計(jì)算節(jié)點(diǎn)利用全局優(yōu)化過程的系統(tǒng)的實(shí)施方案。
【具體實(shí)施方式】
[0017]下列公開涉及執(zhí)行計(jì)劃的產(chǎn)生,所述執(zhí)行計(jì)劃跨以數(shù)據(jù)庫系統(tǒng)、狀態(tài)機(jī)、工作流引擎等形式運(yùn)行的多個(gè)碎片優(yōu)化。在各種實(shí)施方案中,每個(gè)碎片產(chǎn)生具有相關(guān)成本因子的本地優(yōu)化執(zhí)行計(jì)劃用于供在碎片上運(yùn)行的執(zhí)行引擎執(zhí)行。隨后可調(diào)整成本因子并且將其與同其它執(zhí)行計(jì)劃相關(guān)的成本因子比較,以選擇考慮其對整體系統(tǒng)的影響而優(yōu)化的計(jì)劃。對成本因子的調(diào)整可尤其基于由產(chǎn)生執(zhí)行計(jì)劃的碎片收集的統(tǒng)計(jì)數(shù)據(jù)、由其它碎片產(chǎn)生的統(tǒng)計(jì)數(shù)據(jù)和碎片的相對性能特性??赏ㄟ^多種技術(shù)執(zhí)行成本因子的比較,包括循序比較、投票、通過中央機(jī)構(gòu)確定等。
[0018]圖1描繪全局優(yōu)化過程的實(shí)施方案。一個(gè)或多個(gè)客戶端應(yīng)用程序經(jīng)由網(wǎng)絡(luò)100(諸如互聯(lián)網(wǎng))連接至基于碎片的系統(tǒng)??蛻舳藨?yīng)用程序經(jīng)由網(wǎng)路100發(fā)送查詢102至系統(tǒng)。在說明書內(nèi)使用術(shù)語查詢來指用于調(diào)用計(jì)算操作的任意類型的請求或命令,所述計(jì)算操作可例如返回?cái)?shù)據(jù)、改變數(shù)據(jù)或促使計(jì)算過程或裝置的狀態(tài)改變。查詢102可能涉及特定碎片118或可通過可選的重定向組件104路由至此處。例如,在碎片118上運(yùn)行的執(zhí)行引擎120可檢索并且處理查詢。在各種非限制性實(shí)施方案中,執(zhí)行引擎可能是數(shù)據(jù)庫、狀態(tài)機(jī)或工作流程引擎。執(zhí)行引擎執(zhí)行一個(gè)指令集來執(zhí)行查詢。可能存在任意數(shù)量的交替指令集,其能夠執(zhí)行相同查詢,每個(gè)集合具有不同成本。在各種非限制性實(shí)例中,術(shù)語成本可包括執(zhí)行指令或指令集所需的時(shí)間、消耗的CPU周期的數(shù)量、工作集、內(nèi)存容量、緩存容量、存儲裝置讀取和寫入性能等。成本還可能受諸如數(shù)據(jù)集中的行數(shù)或復(fù)制數(shù)據(jù)的數(shù)量的因素的影響。為了減小執(zhí)行查詢的成本,執(zhí)行引擎(有時(shí)通過被稱作查詢優(yōu)化器的組件)可基于最小化或減小執(zhí)行查詢的預(yù)測(即估計(jì))成本的嘗試而產(chǎn)生本地優(yōu)化執(zhí)行計(jì)劃。但是,雖然這種計(jì)劃可能優(yōu)選用于單個(gè)碎片上,但是它未必是在系統(tǒng)級上優(yōu)化。但是,前端模塊122可經(jīng)由通信組件124與其它前端模塊110和116共用計(jì)劃信息和查詢統(tǒng)計(jì)數(shù)據(jù)。通信組件124協(xié)調(diào)或促進(jìn)碎片之間計(jì)劃信息的通信,根據(jù)需要提供對計(jì)劃信息和查詢統(tǒng)計(jì)數(shù)據(jù)的調(diào)整以確定全局優(yōu)化路徑及實(shí)現(xiàn)全局優(yōu)化計(jì)劃的選擇。注意,術(shù)語全局優(yōu)化指的是使用是優(yōu)選的計(jì)劃且不一定描述數(shù)學(xué)上或確定性優(yōu)化的計(jì)劃。
[0019]本文中描述的其它實(shí)施方案允許應(yīng)用程序使用提示來優(yōu)化基于碎片的系統(tǒng)的性能。在一個(gè)實(shí)施方案中,系統(tǒng)促使應(yīng)用程序在其發(fā)送給碎片的查詢中包括改變查詢在碎片上的執(zhí)行方式的指令。在另一個(gè)實(shí)施方案中,系統(tǒng)可能促使應(yīng)用程序包括直接控制用于執(zhí)行查詢的執(zhí)行計(jì)劃的指令。
[0020]進(jìn)一步實(shí)施方案為技術(shù)人員提供用于優(yōu)化數(shù)據(jù)庫性能的提示和建議。例如,在接收到有關(guān)優(yōu)選執(zhí)行計(jì)劃的提示后,軟件工程師可更改應(yīng)用程序程序碼來將含建議的經(jīng)修改查詢發(fā)布給查詢優(yōu)化器。這些建議影響由查詢優(yōu)化器產(chǎn)生的計(jì)劃,使得其符合優(yōu)選的執(zhí)行計(jì)劃。
[0021]本文中參考特定實(shí)例和實(shí)施方案描述本公開的各種方面,所述實(shí)例和實(shí)施方案旨在說明而非限制本公開。應(yīng)了解,本文中提出的標(biāo)的可實(shí)施為計(jì)算機(jī)程序、計(jì)算機(jī)控制設(shè)備、計(jì)算系統(tǒng)或制品,諸如計(jì)算機(jī)可讀存儲介質(zhì)。雖然本文中描述的標(biāo)的于在一個(gè)或多個(gè)計(jì)算裝置上執(zhí)行的程序模塊的大致背景下提出,但是本領(lǐng)域技術(shù)人員將了解,其它實(shí)施可結(jié)合其它類型的程序模塊執(zhí)行。通常,程序模塊包括例程、程序、組件、數(shù)據(jù)結(jié)構(gòu)和執(zhí)行特定任務(wù)或?qū)嵤┨囟ǔ橄髷?shù)據(jù)類型的其它類型的結(jié)構(gòu)。
[0022]本領(lǐng)域技術(shù)人員還將了解,本文中描述的標(biāo)的可在本文中描述的構(gòu)造以外的其它計(jì)算機(jī)系統(tǒng)構(gòu)造上實(shí)踐或結(jié)合其實(shí)踐,包括多處理器系統(tǒng)、基于微處理器或可編程的消費(fèi)者電子裝置、迷你計(jì)算機(jī)、主機(jī)計(jì)算機(jī)、手持計(jì)算機(jī)、個(gè)人數(shù)位助理、電子閱讀器、蜂窩電話裝置、專用硬件裝置、網(wǎng)絡(luò)設(shè)備和類似裝置。本文中描述的實(shí)施方案也可在分布式計(jì)算環(huán)境中實(shí)踐,其中任務(wù)由通過通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理裝置執(zhí)行。在分布式計(jì)算環(huán)境中,程序模塊可位于本地或遠(yuǎn)程內(nèi)存存儲裝置中。
[0023]在本說明書內(nèi),參考附圖,其形成說明書的一部分且經(jīng)由說明示出具體實(shí)施方案或?qū)嵗?。本文中的圖未按比例繪制。在數(shù)個(gè)圖中,相同數(shù)字代表相同元件。
[0024]大容量數(shù)據(jù)的管理是常見的計(jì)算問題。這個(gè)問題的解決方法涉及將大數(shù)據(jù)集劃分為較小集合,每個(gè)較小集合可由相對便宜的計(jì)算裝置管理。每個(gè)計(jì)算裝置也可能負(fù)責(zé)響應(yīng)對指派給它的數(shù)據(jù)集操作的查詢。如果由每個(gè)計(jì)算裝置管理的數(shù)據(jù)共用相同布局或模式,那么相同查詢或語義上等效形式的查詢可應(yīng)用于任意或所有計(jì)算裝置。此外,可選擇用于解決查詢的相同步驟序列以用在所有計(jì)算裝置上。這種序列(其可被稱作執(zhí)行計(jì)劃)描述滿足查詢所需的操作集。可基于序列對個(gè)別計(jì)算裝置的影響而選擇序列。但是,如果依據(jù)序列對總體數(shù)據(jù)管理系統(tǒng)的影響(即,有關(guān)各種因素的成本,諸如響應(yīng)時(shí)間、工作集、CPU周期等)選擇序列而非僅依據(jù)序列對任一個(gè)計(jì)算裝置的影響,那么總體數(shù)據(jù)管理系統(tǒng)的性能可改進(jìn)。
[0025]在設(shè)計(jì)大型數(shù)據(jù)管理系統(tǒng)時(shí),通常期望在若干個(gè)較小計(jì)算裝置之間分配工作負(fù)載,而非使用一個(gè)或兩個(gè)較大且較昂貴的裝置。每個(gè)較小計(jì)算系統(tǒng)可被描述為碎片,這是因?yàn)槠浯砜傮w系統(tǒng)的部分。碎片被分組為所謂的域,其是被組織來共同管理工作負(fù)載的碎片集合。碎片可實(shí)施在一系列計(jì)算環(huán)境上,諸如商用硬件計(jì)算機(jī)、虛擬機(jī)、計(jì)算集群和計(jì)算設(shè)備。為方便起見,任意這些計(jì)算裝置或環(huán)境可被描述為計(jì)算節(jié)點(diǎn)。
[0026]通常,每個(gè)碎片運(yùn)行完全獨(dú)立的執(zhí)行引擎,諸如數(shù)據(jù)庫系統(tǒng),所述執(zhí)行引擎可具有至它自己的專用處理器、內(nèi)存和存儲裝置的訪問權(quán)。采用這種類型的獨(dú)立架構(gòu)的系統(tǒng)具有良好的擴(kuò)展性且與共用關(guān)鍵組件的系統(tǒng)相比也更具彈性。即使域中的個(gè)別碎片已停止工作,獨(dú)立架構(gòu)仍允許系統(tǒng)作為一個(gè)整體繼續(xù)運(yùn)行。但是,本領(lǐng)域一般技術(shù)人員將了解,偏離純獨(dú)立架構(gòu)偶爾是期望或必要的。例如,包括較大型系統(tǒng)的碎片通常將共用共同的網(wǎng)絡(luò)基礎(chǔ)設(shè)施。雖然這種情況下的網(wǎng)路代表單個(gè)故障點(diǎn),但是它們與易發(fā)生誤差的組件(諸如存儲子系統(tǒng))相比通常相對穩(wěn)健。因此,使用共同網(wǎng)絡(luò)允許碎片之間的通信,同時(shí)保留獨(dú)立架構(gòu)的大多數(shù)優(yōu)點(diǎn)。
[0027]可采用若干可行方法來使用基于碎片的架構(gòu)構(gòu)建數(shù)據(jù)管理系統(tǒng)。在一個(gè)方法中,數(shù)據(jù)表按行分區(qū),其中向特定碎片指派每個(gè)行范圍。碎片處置檢索或存儲具有屬于指派給所述分區(qū)的值范圍內(nèi)的值的數(shù)據(jù)的所有請求。這種方法被稱作水平分區(qū)。作為一個(gè)實(shí)例,考慮含顧客信息的表。顧客表可基于顧客的姓水平分區(qū)。在兩個(gè)碎片的域中,姓以‘A’至‘M’開頭的顧客可被指派至第一碎片且姓以‘N’至iV開頭的顧客可被指派至第二碎片。
[0028]在一些情況下,域所維持的所有表將被水平分區(qū)。但是,許多其它配置是可行的。一些表可被水平分區(qū)而其它表在碎片之間復(fù)制。在其它情況下,水平分區(qū)的表被復(fù)制作為防止硬件故障的保護(hù)手段。
[0029]在表被水平分區(qū)時(shí),每個(gè)碎片將托管具有相同模式但含有不同數(shù)據(jù)集的表。換句話說,托管在每個(gè)碎片上的水平分區(qū)表共用相同的列布局但含有不同數(shù)據(jù)行。因?yàn)槊總€(gè)碎片上的表共用共同的模式,所以可不考慮最終將對哪個(gè)碎片執(zhí)行查詢寫入查詢。
[0030]為了利用共同的模式,提供用于將查詢路由至含有所需數(shù)據(jù)的碎片的手段,如果請求涉及橫跨多于一個(gè)水平分區(qū)的數(shù)據(jù)的請求,那么可能涉及多個(gè)碎片。將查詢路由至正確碎片的方法的三個(gè)非限制性實(shí)例如下。