用于針對矢量化查詢執(zhí)行的自適應矢量大小選擇的系統(tǒng)和方法
【專利說明】用于針對矢量化查詢執(zhí)行的自適應矢量大小選擇的系統(tǒng)和 方法
[0001] 相關(guān)申請案交叉申請
[0002] 本發(fā)明要求2013年3月13日遞交的發(fā)明名稱為"用于針對矢量化查詢執(zhí)行的 自適應矢量大小選擇的系統(tǒng)和方法(System and Method for Adaptive Vector Size Selection for Vectorized Query Execution)" 的第 13/798, 680 號美國專利申請案的在 先申請優(yōu)先權(quán),該在先申請的內(nèi)容以引入的方式并入本文本中,如全文再現(xiàn)一般。
技術(shù)領(lǐng)域
[0003] 本發(fā)明總體上涉及數(shù)據(jù)庫系統(tǒng)和方法,在具體實施例中,涉及一種用于針對矢量 化查詢執(zhí)行的自適應矢量大小選擇的系統(tǒng)和方法。
【背景技術(shù)】
[0004] 矢量化查詢執(zhí)行是對一些傳統(tǒng)數(shù)據(jù)庫所使用的當前行流水線執(zhí)行引擎的一項顯 著的性能改進。在傳統(tǒng)的流水線執(zhí)行引擎中,每個迭代器之間的數(shù)據(jù)單元是一行,而矢量化 查詢執(zhí)行則使用矢量。使用矢量作為數(shù)據(jù)單元的一個益處在于將每行開銷分攤至行矢量。 矢量化查詢執(zhí)行的一個關(guān)鍵因素是矢量長度或大小,過小和過大的大小都會損害性能。一 般而言,矢量大小越大,可以分攤的每行開銷越多,從而使得性能更好。然而,較大大小的矢 量需要更多的內(nèi)存來存儲它,這可能導致緩存未命中并因此損害性能。不存在針對矢量大 小的唯一最佳設(shè)置,因為它還涉及到查詢和硬件設(shè)置。對于不同的查詢和不同的硬件設(shè)置, 最優(yōu)長度可以是不同的。例如,較大的Ll緩存允許更大大小的矢量。需要一種根據(jù)軟件和 硬件需求選擇最優(yōu)矢量大小以獲得性能的方法。
【發(fā)明內(nèi)容】
[0005] 根據(jù)實施例,一種用于針對矢量化查詢執(zhí)行的自適應矢量大小選擇的方法包括: 在查詢計劃時間期間在查詢計劃器模塊處確定適于查詢計劃樹的矢量大小,在用于所述查 詢計劃樹的查詢執(zhí)行時間期間在查詢執(zhí)行引擎處監(jiān)測硬件性能指標,以及根據(jù)所述監(jiān)測到 的硬件性能指標調(diào)整所述矢量大小。
[0006] 根據(jù)另一實施例,一種用于針對矢量化查詢執(zhí)行的自適應矢量大小選擇的方法包 括:在用于查詢計劃樹的矢量化查詢執(zhí)行期間在查詢執(zhí)行引擎處收集處理單元計數(shù)器;根 據(jù)所述收集到的處理單元計數(shù)器修改用于處理所述矢量化查詢執(zhí)行的矢量的矢量大??;以 及在確定所述矢量化查詢執(zhí)行的令人滿意的性能或者所述矢量化查詢執(zhí)行超時時,確定所 述修改后矢量大小是否與在所述矢量化查詢執(zhí)行的開始時所使用的初始矢量大小明顯不 同。所述方法還包括:在確定所述修改后矢量大小與所述初始矢量大小明顯不同時,向優(yōu)化 器發(fā)送所述修改后矢量大小以便執(zhí)行類似于所述查詢計劃樹的后續(xù)查詢計劃樹。
[0007] 在又一實施例中,一種用于針對矢量化查詢執(zhí)行的自適應矢量大小選擇的裝置包 括處理器以及存儲用于由所述處理器執(zhí)行的程序的計算機可讀存儲介質(zhì)。所述程序包括用 于執(zhí)行以下操作的指令:在用于查詢計劃樹的矢量化查詢執(zhí)行期間在運行時間時收集處理 器計數(shù)器;根據(jù)所述收集到的處理器計數(shù)器修改用于處理所述矢量化查詢執(zhí)行的矢量的矢 量大??;以及在確定所述矢量化查詢執(zhí)行的令人滿意的性能或者所述矢量化查詢執(zhí)行超時 時,確定所述修改后矢量大小是否與在所述矢量化查詢執(zhí)行的開始時所使用的初始矢量大 小明顯不同。所述指令還包括:在確定所述修改后矢量大小與所述初始矢量大小明顯不同 時,選擇所述修改后矢量大小以開始執(zhí)行類似于所述查詢計劃樹的后續(xù)查詢計劃樹。
【附圖說明】
[0008] 為了更完整地理解本發(fā)明及其優(yōu)點,現(xiàn)在參考下文結(jié)合附圖進行的描述,其中:
[0009] 圖1示出用于查詢分段和初始矢量大小設(shè)置的實施例方法;
[0010] 圖2示出計劃分段的示例;
[0011] 圖3示出用于執(zhí)行時間時自適應矢量大小選擇的實施例方法;
[0012] 圖4為可以用于實施各種實施例的處理系統(tǒng)的方框圖。
【具體實施方式】
[0013] 下文將詳細論述當前優(yōu)選實施例的制作和使用。然而,應了解,本發(fā)明提供可在各 種具體上下文中體現(xiàn)的許多適用的發(fā)明性概念。所論述的具體實施例僅僅說明用以實施和 使用本發(fā)明的具體方式,而不限制本發(fā)明的范圍。
[0014] 提供了用于針對矢量化查詢執(zhí)行的自適應矢量大小選擇的系統(tǒng)和方法實施例。自 適應矢量大小選擇在兩個階段中實施。在查詢計劃階段中,針對查詢估計合適的矢量大小, 例如,通過查詢計劃器。計劃階段包括分析查詢計劃樹、將樹分段成不同片段,以及為查詢 執(zhí)行計劃向每個片段分配初始矢量大小,例如基于經(jīng)驗性公式。在后續(xù)查詢執(zhí)行階段中,執(zhí) 行引擎調(diào)整所估計的值以提高性能。在執(zhí)行階段中,利用計劃階段的所估計的矢量大小開 始查詢計劃執(zhí)行。在最初的若干執(zhí)行循環(huán)中,使用這些矢量用于測試:通過嘗試不同的矢量 大小并觀察相關(guān)處理器(或CPU)計數(shù)器來增大或減小矢量大小,并因此實現(xiàn)最優(yōu)大小。
[0015] 在計劃階段中,計劃器可以分析查詢(執(zhí)行)計劃樹,將樹拆分成不同片段,并基 于經(jīng)驗公式向每個片段分配初始矢量大小。例如,當計劃器獲得查詢計劃樹時,計劃器將 計劃樹拆分成片段,其中片段之間的邊界可以由計劃樹中的任何相鄰的非流水線迭代器決 定。然后計劃器決定用于每個片段的最佳的或合適的矢量大小。
[0016] 圖1示出用于查詢或計劃分段和初始矢量大小設(shè)置的實施例方法100。方法100 在查詢執(zhí)行階段之前的計劃階段中實施,并且可以包括生成查詢執(zhí)行計劃。在方框110處, 矢量化計劃器生成用于查詢102的計劃樹104。在判斷方框120處,方法100 (例如,計劃 器)確定查詢是否是相對短的查詢。如果查詢是短查詢,那么方法100前進至方框125,在 方框125處使用默認矢量大小用于最終計劃樹108。這種對"短運行查詢"的檢查是為了防 止小查詢上的回歸。否則,方法100前進至方框130,在方框130處實施查詢計劃分段以提 供分段后計劃樹106。接下來,在方框140處,基于反饋和/或經(jīng)驗性公式為計劃樹的每個 片段計算出最佳的或最優(yōu)的矢量大小以提供最終計劃樹108。反饋可以包括先前針對類似 的查詢計劃、片段、硬件、或其組合確定并使用的矢量大小。
[0017] 圖2示出計劃分段200的示例。計劃可以在計劃階段期間進行分段,例如作為方 法100的一部分。計劃由兩個非流水線迭代器13和15根據(jù)下表1拆分成四個片段。迭代 器15也是連接點,其中每個分支對應于不同片段。表1示出可以針對用于查詢執(zhí)行的計 劃樹使用的一些示例性迭代器的一些特性。整數(shù)N表示矢量大小。對于屬性"流水線式", "無"表示相應的迭代器在該迭代器可以輸出之前可能不會消耗子迭代器的所有輸出。流水 線式迭代器示例包括掃描、流聚集、過濾器、適配器和其它。非流水線式迭代器示例包括哈 希聚集和哈希連接(或哈希連接建立,如果哈希連接被拆分成建立迭代器和探測迭代器的 話)。圖2中計劃的四個片段包括片段1(具有II、12和15)、片段2 (具有II、13和15)、 片段3 (具有14和15)、和片段4 (具有13和14)。
[0018] 表L計劃迭代器特性
[0020] 在實施例中,每個迭代器的內(nèi)存占用率可以基于某一公式,諸如:
[0021] 內(nèi)存占用率(迭代器)=輸入大小+輸出大小+處理大小+開銷。(1)根據(jù)該公 式,子迭代器的輸出是當前迭代器的輸入,因此迭代器的片段的整體內(nèi)存占用率可以是:
[0022] 片段內(nèi)存占用率(迭代器)=輸入大小+SUM(輸出大小+處理大小+開銷)。(2) 為了實現(xiàn)最佳的或最優(yōu)的性能,最佳或最優(yōu)的片段內(nèi)存占用率值可以小于Ll緩存大小,如 果可能的話。如果不是,那么該值可以與最小可能的緩存級匹配。根據(jù)以上公式,可以確定 初始矢量大小:最佳適合大小。矢量大小可以是至少某一值(常數(shù))以分攤每行開銷的成 本。因此,最終格式可以如下:
[0023] 最佳矢量大小=MX (常數(shù),最佳適合大小)。(3)
[0024] 在以上公式(1)中,存在一些計劃器估計的內(nèi)存占用率,如哈希表大小。如果哈希 表大于所估計的大小,那么利用當前所估計的矢量大小的查詢執(zhí)行可能最終顛簸緩存。因 此,需要某種執(zhí)行階段反饋以在執(zhí)行階段期間監(jiān)測性能特性。
[0025] 圖3示出用于執(zhí)行時間時自適應矢量大小選擇的實施例方法300。方法300在緊 接計劃階段的執(zhí)行階段中實施,例如,在實施方法100之后。方法300包括根據(jù)處理器或 CPU執(zhí)行時間反饋來調(diào)諧或調(diào)整例如在方法100中(在計劃階段期間)選擇的初始矢量大 小。CPU建立計數(shù)器
[0026] (PMC)用于提供針對執(zhí)行性能的反饋??梢源嬖诳梢詾榱嗽撃康倪M行監(jiān)測的若干 計數(shù)器(例如,數(shù)百個計數(shù)器)。例如,下表2示出可以監(jiān)測的計數(shù)器的某一選擇。
[0027] 表2.可以在執(zhí)行階段期間監(jiān)測的CPU計數(shù)器 LlN 丄UOlZZZdy Λ 、" 兮/ο JA
[0030] 當矢量長度N對于執(zhí)行查詢過大時,預期會有更高的緩存未命中,但更少的指令 可能失效。當矢量長度N對于執(zhí)行查詢過小時,預期會有更少的緩存未命中,但更多的指令 可能失效。因此,針對矢量大小調(diào)諧采用的規(guī)則是增大矢量大小直至觀察到過量緩存未命 中。為了減少緩存未命中,如果緩存未命中可以減少,那么減小矢量大小。例如,用于增大 或減小矢量大小的步長單位可以設(shè)置為當前大小的10%。
[0031] 在判斷方框310處,方法300(例如,在計劃執(zhí)行期間)確定查詢是否是相對短的 查詢。如果查詢是短查詢,那么方法300前進至方框315,在方框315處優(yōu)化處理(或方法 300)結(jié)束。這種對"短運行查詢"的檢查是為了防止小查詢上的回歸。否則,方法300前進 至方框320,在方框320處收集用于若干矢量的CPU計數(shù)器。接著,在方框330處,基于所 收集的計數(shù)器狀態(tài)修改矢量大小。該大小可以增大,除非計數(shù)器指示性能降低(相比于先 前收集的計數(shù)器狀態(tài))。如果性能降低,那么減小大小以提高性能。在判斷方框340處,方 法300 (基于所監(jiān)測的計數(shù)器)確定性能是否足夠好,或者監(jiān)視是否超時。方法300返回至 方框320以繼續(xù)監(jiān)視計數(shù)器,并相應地修改矢量大小,直至方框34中的任一條件得到滿足。 然后,方法300前進至判斷方框350,在判斷方框350處方法300確定修改后矢量大小是否 與初始值(例如,來自計劃階段)明顯不同。如果修改后矢量大小與初始大小明顯不同,那 么方法