新四季網

一種代價估計的方法及設備與流程

2023-05-19 08:59:41 2

本申請涉及計算機領域,尤其涉及一種代價估計的方法及設備。
背景技術:
::基於代價的優化(cbo)是資料庫系統中一種常見的結構化查詢語句(sql)優化方法,其中,sql操作代價的估計是cbo的核心,精確的代價估計需要精良的估計算法和完備的統計信息,若單純依靠現有的估計算法和統計信息模型,代價往往估計不準確,優化效果欠佳。現有的資料庫系統不能解決代價估算的準確性和統計信息的完備性之間的矛盾,統計信息本身存在誤差,當數據集異常龐大時,收集統計信息需要耗費巨大的資源,對於部分統計信息往往採用粗略估算的方式,為後續估算引入誤差。另一方面,對於過濾、聚合等操作的代價估算,現有cbo方案中是假設目標數據均勻分布,對於數據傾斜的場景,估算誤差大。現有技術中採用的靜態方式,收集的統計信息不足,對部分無法估算的操作,實現中往往採用經驗值,誤差大。連接算法代價估計的精確度依賴維度表過濾率的估算,若該結果集再次參與其他連接,則會進一步放大誤差。技術實現要素:本申請的一個目的是提供一種代價估計的方法及設備,解決現有資料庫系統不能解決代價估算的準確性和統計信息的完備性之間的矛盾及現有資料庫系統不能得到全局最優的執行計劃的問題。根據本申請的一個方面,提供了一種代價估計的方法,所述方法包括:根據操作樹的操作類型確定對應的代價估計方式,基於所述代價估計方式及獲取到的原始統計信息確定所述操作類型的代價估計;確定待調整的代價估計,基於所述待調整的代價估計對應的操作類型確定調整因子,根據所述調整因子調整所述待調整的代價估計;根據未調整的代價估計及調整後的代價估計確定所述操作樹的累積代價估計。進一步地,所述方法還包括:根據所述累積代價估計優化結構化查詢語言語句對應的執行計劃。進一步地,上述方法中,所述方法包括:通過hints、配置文件及新增語法中任一種或任幾種組合方式對獲取到的原始統計信息進行矯正,得到矯正後的統計信息。進一步地,所述操作樹的操作類型包括以下至少任一項:掃表操作、過濾操作、連接操作及聚合操作。進一步地,當所述操作樹的操作類型為過濾操作時,確定待調整的代價估計,基於所述待調整的代價估計對應的操作類型確定調整因子,根據所述調整因子調整所述待調整的代價估計,包括:確定待調整的代價估計為所述過濾操作的代價估計,基於所述過濾操作的指定選擇確定調整因子,根據所述調整因子調整所述過濾操作的代價估計。進一步地,基於所述過濾操作的指定選擇確定調整因子,根據所述調整因子調整所述過濾操作的代價估計,包括以下任一項:若所述過濾操作的指定選擇為異值數,則確定調整因子,並根據所述調整因子更新所述異值數的值,根據更新後的異值數的值調整所述過濾操作的代價估計;若所述過濾操作的指定選擇為選擇率,則從大於0且小於等於1的範圍中確定調整因子,並根據確定的調整因子更新所述選擇率的值,根據更新後的選擇率的值調整所述過濾操作的代價估計;若所述過濾操作的指定選擇為數據傾斜度,則從大於0且小於等於10的範圍中確定調整因子,並根據確定的調整因子更新所述數據傾斜度的值,根據更新後的數據傾斜度的值調整所述過濾操作的代價估計。進一步地,當所述操作樹的操作類型為連接操作時,確定待調整的代價估計,基於所述待調整的代價估計對應的操作類型確定調整因子,根據所述調整因子調整所述待調整的代價估計,包括:確定待調整的代價估計為所述連接操作的代價估計,基於所述連接操作的指定選擇確定調整因子,根據確定的調整因子計算代價因子,並根據所述代價因子調整所述連接操作的代價估計。進一步地,基於所述連接操作的指定選擇確定調整因子,根據確定的調整因子計算代價因子,包括以下任一項:若所述連接操作的指定選擇為連接優先級,則確定調整因子為所述連接優先級,根據預設的代價因子及所述優先級確定所述連接操作的代價因子;若所述連接操作的指定選擇為連接類型,則確定調整因子為所述連接類型,計算所述連接類型的代價因子,並根據預設的代價因子及所述連接類型的代價因子確定所述連接操作的代價因子;若所述連接操作的指定選擇為數據傾斜度,則確定調整因子為所述數據傾斜度,根據所述預設的代價因子及所述數據傾斜度確定所述連接操作的代價因子;若所述連接操作的指定選擇為其他優化,則確定其他優化對應的調整因子,計算其他優化對應的代價因子,根據預設的代價因子及所述其他優化對應的代價因子確定所述連接操作的代價因子。進一步地,根據所述代價因子調整所述連接操作的代價估計,包括:根據所述代價因子與所述連接操作的代價估計的乘積更新所述連接操作的代價估計。進一步地,當所述操作樹的操作類型為聚合操作時,確定待調整的代價估計,基於所述待調整的代價估計對應的操作類型確定調整因子,根據所述調整因子調整所述待調整的代價估計,包括:確定待調整的代價估計為所述聚合操作的代價估計,基於所述聚合操作的指定選擇確定調整因子,根據所述調整因子調整所述聚合操作的代價估計。進一步地,基於所述聚合操作的指定選擇確定調整因子,根據所述調整因子調整所述聚合操作的代價估計,包括以下任一項:若所述聚合操作的指定選擇為聚合率,則確定調整因子為所述聚合率,更新所述聚合率的值,根據更新後的聚合率的值計算代價因子,並根據所述代價因子調整所述聚合操作的代價估計;若所述聚合操作的指定選擇為傾斜率,則確定調整因子為所述傾斜率,根據所述傾斜率及所述聚合操作的聚合率更新所述聚合率的值,根據更新後的聚合率的值計算代價因子,並根據所述代價因子調整所述聚合操作的代價估計。進一步地,根據所述調整因子調整所述聚合操作的代價估計,包括:根據所述代價因子與所述聚合操作的代價估計的乘積更新所述聚合操作的代價估計。進一步地,所述方法還包括:通過hints、配置文件及新增語法中任一種或任幾種組合方式將所述統計信息的數據表存在其他優化方式的信息進行發送至所述操作樹。根據本申請另一個方面,還提供了一種代價估計的設備,所述設備包括:估算裝置,用於根據操作樹的操作類型確定對應的代價估計方式,基於所述代價估計方式及獲取到的原始統計信息確定所述操作類型的代價估計;優化裝置,用於確定待調整的代價估計,基於所述待調整的代價估計對應的操作類型確定調整因子,根據所述調整因子調整所述待調整的代價估計;累積裝置,用於根據未調整的代價估計及調整後的代價估計確定所述操作樹的累積代價估計。進一步地,所述設備還包括:執行裝置,用於根據所述累積代價估計優化結構化查詢語言語句對應的執行計劃。進一步地,所述設備包括:統計信息矯正裝置,用於通過hints、配置文件及新增語法中任一種或任幾種組合方式對獲取到的原始統計信息進行矯正,得到矯正後的統計信息。進一步地,所述操作樹的操作類型包括以下至少任一項:掃表操作、過濾操作、連接操作及聚合操作。進一步地,當所述操作樹的操作類型為過濾操作時,所述優化裝置用於:確定待調整的代價估計為所述過濾操作的代價估計,基於所述過濾操作的指定選擇確定調整因子,根據所述調整因子調整所述過濾操作的代價估計。進一步地,所述優化裝置用於以下任一項:若所述過濾操作的指定選擇為異值數,則確定調整因子,並根據所述調整因子更新所述異值數的值,根據更新後的異值數的值調整所述過濾操作的代價估計;若所述過濾操作的指定選擇為選擇率,則從大於0且小於等於1的範圍中確定調整因子,並根據確定的調整因子更新所述選擇率的值,根據更新後的選擇率的值調整所述過濾操作的代價估計;若所述過濾操作的指定選擇為數據傾斜度,則從大於0且小於等於10的範圍中確定調整因子,並根據確定的調整因子更新所述數據傾斜度的值,根據更新後的數據傾斜度的值調整所述過濾操作的代價估計。進一步地,當所述操作樹的操作類型為連接操作時,所述優化裝置用於:確定待調整的代價估計為所述連接操作的代價估計,基於所述連接操作的指定選擇確定調整因子,根據確定的調整因子計算代價因子,根據所述代價因子調整所述連接操作的代價估計。進一步地,所述優化裝置用於以下任一項:若所述連接操作的指定選擇為連接優先級,則確定調整因子為所述連接優先級,根據預設的代價因子及所述優先級確定所述連接操作的代價因子;若所述連接操作的指定選擇為連接類型,則確定調整因子為所述連接類型,計算所述連接類型的代價因子,並根據預設的代價因子及所述連接類型的代價因子確定所述連接操作的代價因子;若所述連接操作的指定選擇為數據傾斜度,則確定調整因子為所述數據傾斜度,根據所述預設的代價因子及所述數據傾斜度確定所述連接操作的代價因子;若所述連接操作的指定選擇為其他優化,則確定其他優化對應的調整因子,計算其他優化對應的代價因子,根據預設的代價因子及所述其他優化對應的代價因子確定所述連接操作的代價因子。進一步地,所述優化裝置用於:根據所述代價因子與所述連接操作的代價估計的乘積更新所述連接操作的代價估計。進一步地,當所述操作樹的操作類型為聚合操作時,所述優化裝置用於:確定待調整的代價估計為所述聚合操作的代價估計,基於所述聚合操作的指定選擇確定調整因子,根據所述調整因子調整所述聚合操作的代價估計。進一步地,所述優化裝置用於以下任一項:若所述聚合操作的指定選擇為聚合率,則確定調整因子為所述聚合率,更新所述聚合率的值,並根據更新後的聚合率的值計算代價因子,並根據所述代價因子調整所述聚合操作的代價估計;若所述聚合操作的指定選擇為傾斜率,則確定調整因子為所述傾斜率,根據所述傾斜率及所述聚合操作的聚合率更新所述聚合率的值,根據更新後的聚合率的值計算代價因子,並根據所述代價因子調整所述聚合操作的代價估計。進一步地,所述優化裝置用於:根據所述代價因子與所述聚合操作的代價估計的乘積更新所述聚合操作的代價估計。進一步地,所述設備還包括:發送裝置,用於通過hints、配置文件及新增語法中任一種或任幾種組合方式將所述統計信息的數據表存在其他優化方式的信息進行發送至所述操作樹。根據本申請再一個方面,還提供了一種基於計算的設備,包括:處理器;以及被安排成存儲計算機可執行指令的存儲器,所述可執行指令在被執行時使所述處理器:根據所述操作樹的操作類型確定對應的代價估計方式,基於所述代價估計方式及獲取到的原始統計信息確定所述操作類型的代價估計;確定待調整的代價估計,基於所述待調整的代價估計對應的操作類型確定調整因子,根據所述調整因子調整所述待調整的代價估計;根據未調整的代價估計及調整後的代價估計確定所述操作樹的累積代價估計。與現有技術相比,本申請通過根據所述操作樹的操作類型確定對應的代價估計方式,基於所述代價估計方式及獲取到的原始統計信息確定所述操作類型的代價估計;確定待調整的代價估計,基於所述待調整的代價估計對應的操作類型確定調整因子,根據所述調整因子調整所述待調整的代價估計;根據未調整的代價估計及調整後的代價估計確定所述操作樹的累積代價估計,解決了傳統代價優化器存在的統計信息的完備性和代價估算的準確性之間的矛盾;通過矯正代價估計,提高代價優化器代價估計的準確性,從而生成性能更好的執行計劃。進一步地,改進sql的代價優化器,使其感知其他優化的效果,從而生成全局更優的執行計劃。附圖說明通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細描述,本申請的其它特徵、目的和優點將會變得更明顯:圖1示出根據本申請的一個方面提供的一種代價估計的方法流程示意圖;圖2示出本申請中的一實施例的操作樹的示意圖;圖3示出根據本申請的又一個方面提供的一種代價估計的設備結構示意圖。附圖中相同或相似的附圖標記代表相同或相似的部件。具體實施方式下面結合附圖對本申請作進一步詳細描述。在本申請一個典型的配置中,終端、服務網絡的設備和可信方均包括一個或多個處理器(cpu)、輸入/輸出接口、網絡接口和內存。內存可能包括計算機可讀介質中的非永久性存儲器,隨機存取存儲器(ram)和/或非易失性內存等形式,如只讀存儲器(rom)或快閃記憶體(flashram)。內存是計算機可讀介質的示例。計算機可讀介質包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現信息存儲。信息可以是計算機可讀指令、數據結構、程序的模塊或其他數據。計算機的存儲介質的例子包括,但不限於相變內存(pram)、靜態隨機存取存儲器(sram)、動態隨機存取存儲器(dram)、其他類型的隨機存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內存技術、只讀光碟只讀存儲器(cd-rom)、數字多功能光碟(dvd)或其他光學存儲、磁盒式磁帶,磁帶磁碟存儲或其他磁性存儲設備或任何其他非傳輸介質,可用於存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質不包括非暫存電腦可讀媒體(transitorymedia),如調製的數據信號和載波。圖1示出根據本申請的一個方面提供的一種代價估計的方法流程示意圖,所述方法包括:在步驟s11中,根據操作樹的操作類型確定對應的代價估計方式,基於所述代價估計方式及獲取到的原始統計信息確定所述操作類型的代價估計;在步驟s12中,確定待調整的代價估計,基於所述待調整的代價估計對應的操作類型確定調整因子,根據所述調整因子調整所述待調整的代價估計;在步驟s13中,根據未調整的代價估計及調整後的代價估計確定所述操作樹的累積代價估計。從而解決傳統代價優化器中存在的統計信息的完備性和代價估算的準確性之間的矛盾,進一步地,本申請所述方法包括:根據所述累積代價估計優化結構化查詢語言語句對應的執行計劃。本申請所述的代價估計的方法應用於資料庫系統中sql的優化,提高sql的代價優化器代價估計的準確性,從而生成性能更好的執行計劃。在步驟s11中,根據所述操作樹的操作類型確定對應的代價估計方式,基於所述代價估計方式及所述矯正後的統計信息確定所述操作類型的代價估計;在此,一棵操作樹由不同的操作符構成,每一種操作符代表一類操作,基本的操作包括掃表、過濾、連接、投影、聚合、選擇等,如圖2所示的一顆典型的操作樹示意圖,調整操作樹上的不同操作,估算每一步操作的代價,最終生成一顆累積代價最小的操作樹,生成執行計劃,而不同操作類型的代價估算方法不同,因此需要確定操作類型,採用對應的代價估計方式,進行每一步操作的代價估計。需要說明的是,在資料庫系統中,編譯後的sql語句會被表示為某種內部形式,可稱為操作樹(operatortree),統計信息為後續代價估算的數據基礎,精良的代價估算算法依賴於完備的統計信息,在本申請一實施例中,獲取到的原始統計信息的缺失可以通過人工補充,統計信息和代價估算的誤差還可以通過人工矯正,通過一些額外途徑分析或獲取到數據集更加精準的信息。在本申請一實施例中,可以通過hints的方式對所述原始的統計信息進行矯正,得到矯正後的統計信息。在此,矯正cbo代價估算模型的實現方式有多種,可以採用sql中hints的方式為cbo提供額外信息,還可以通過添加新的語法、配置文件等方式靈活設置,在本申請實施例中,通過hints的方式僅為舉例。統計信息本身的誤差通過hints的方式消除,例如,若估算的ndv誤差較大,可以用如下方式矯正:/*+ndv(col)=value*/,或者矯正某一屬性的最大值:/*+max(col)=value*/。對於其他統計信息如表級和列級存在的誤差,也可以通過hints的方式進行矯正,通過hints方式矯正統計信息,從而保證了代價估算的準確性。在上述實施例中,ndv(numberofdistinctvalue,異值數)從統計信息中得到。在本申請一實施例中,所述操作樹的操作類型包括以下至少任一項:掃表操作、過濾操作、連接操作及聚合操作。在本申請一實施例中,矯正代價優化器中價估算模型可對操作類型中掃表操作、過濾操作、連接操作及聚合操作中的任一種或任幾種組合中的代價估算進行矯正,提高sql的代價優化器代價估計的準確性,從而生成性能更好的執行計劃。在步驟s12中,確定待調整的代價估計,基於所述待調整的代價估計對應的操作類型確定調整因子,根據所述調整因子調整所述待調整的代價估計;在此,對於過濾、聚合等操作的代價估算,通過調整因子進行調整代價估計,從而減少數據傾斜的場景的代價估算,因不同的操作類型的代價,估計算法不同,因此需要確定待調整的代價估計,可能是需要優化過濾操作、連接操作、聚合操作等操作中的一種操作或任幾種操作,進一步地提高操作樹的代價估算的準確性。需要說明的是,調整因子包括謂詞的選擇率、連接的優先級、連接類型、聚合率、連接率、代價因子等會影響每一操作的代價估計的因素。在步驟s13中,根據未調整的代價估計及調整後的代價估計確定所述操作樹的累積代價估計。在一實施例中,例如,掃表操作的代價估計為a,未進行調整,過濾操作時的代價估算算法進行優化,得到調整後的代價估計b』,連接操作的代價估算算法進行優化,得到調整後的代價估計c』,聚合操作等其他操作的代價估計均未調整,則操作樹的最終代價是由未進行優化估算算法的操作類型的代價估計(比如代價估計a)與進行優化估算算法的操作類型的代價估計(比如代價估計b』、c』)的累積代價估計,當然,可以理解的是,操作樹的每一操作類型的代價估算算法均可進行優化,或部分進行優化。其中,具體優化操作類型的估算算法可以通過如下方式實現:進一步地,當所述操作樹的操作類型為過濾操作時,在步驟s12中,確定待調整的代價估計為所述過濾操作的代價估計,基於所述過濾操作的指定選擇確定調整因子,根據所述調整因子調整所述過濾操作的代價估計。在本申請一實施例中,過濾操作的代價與謂詞的選擇率相關,不同形式的謂詞,其選擇率的估算算法不同,假定數據均勻分布,則恆等謂詞(例如col=value)的選擇率用該列的1/ndv估算,範圍謂詞的選擇率則可以估算為範圍佔比。因此可通過調整選擇率可對過濾操作進行優化,而選擇率與ndv有關,進而可通過矯正ndv的方式可減少估算的誤差。可通過以下方式進行實現:進一步地,在步驟s12中,若所述過濾操作的指定選擇為異值數,則確定調整因子,並根據所述調整因子更新所述異值數的值,根據更新後的異值數的值調整所述過濾操作的代價估計;若所述過濾操作的指定選擇為選擇率(selectivity),則從大於0且小於等於1的範圍中確定調整因子,並根據確定的調整因子更新所述選擇率的值,根據更新後的選擇率的值調整所述過濾操作的代價估計;若所述過濾操作的指定選擇為數據傾斜度(skew-ratio),則從大於0且小於等於10的範圍中確定調整因子,並根據確定的調整因子更新所述數據傾斜度的值,根據更新後的數據傾斜度的值調整所述過濾操作的代價估計。在本申請一實施例中,通過hints指定謂詞(predicate)的選擇率(value):/*+selectivity(predicate)=value*/和傾斜度/*+skew(table)=value*/,selectivity(predicate)的取值範圍為(0,1.0],skew(table)的取值範圍為(1.0,10.0],具體地為若指定了異值數(ndv),則改變該過濾操作的異值數的值,若指定了選擇率,則改變過濾操作的選擇率的值,若指定了數據傾斜度,則改變該過濾操作數據傾斜度的值,若指定了其他情況,進行相應處理。根據上述指定操作確定調整因子對過濾操作的代價估算進行優化,更新過濾操作,重新計算過濾操作的代價。通過指定值(指定異值數、選擇率等的值),既節省了複雜的運算,又避免了cbo對於選擇率的錯誤估計,對過度傾斜的表,cbo可以針對性選擇連接的類型。進一步地,當所述操作樹的操作類型為連接操作時,在步驟s12中,確定待調整的代價估計為所述連接操作的代價估計,基於所述連接操作的指定選擇確定調整因子,根據確定的調整因子計算代價因子,根據所述代價因子調整所述連接操作的代價估計。在此,連接操作需要估算參與連接的數據集的規模和連接後數據集的規模,參與連接的數據集往往從原始數據集經過過濾後得到,其數據集規模與謂詞的過濾率相關,連接後的數據集規模的估算可以通過將連接謂詞作為事實表的過濾條件處理,謂詞對維度表的過濾率即為事實表的過濾率。連接操作代價依賴於很多因素,其代價估計會直接影響到連接順序和算法的選擇,對性能的影響非常大。其中,代價因子為最終調整代價的係數,在以下實施例中,代價因子與代價係數可互換使用,通過調整代價因子間接的調整代價估計,在本申請一實施例中,可以通過幹預的方式,指定或者修正連接順序或者連接算法,確定代價係數,從而調整連接操作的代價估計。具體地,通過以下方式實現:在本申請一實施例中,在步驟s12中,若所述連接操作的指定選擇為連接優先級,則確定調整因子為所述連接優先級,根據預設的代價因子及所述優先級確定所述連接操作的代價因子;若所述連接操作的指定選擇為連接類型,則確定調整因子為所述連接類型,計算所述連接類型的代價因子,並根據預設的代價因子及所述連接類型的代價因子確定所述連接操作的代價因子;若所述連接操作的指定選擇為數據傾斜度,則確定調整因子為所述數據傾斜度,根據所述預設的代價因子及所述數據傾斜度確定所述連接操作的代價因子;若所述連接操作的指定選擇為其他優化,則確定其他優化對應的調整因子,計算其他優化對應的代價因子,根據預設的代價因子及所述其他優化對應的代價因子確定所述連接操作的代價因子。在此,若操作符的類型是連接,表示是連接操作,則首先定義初始代價係數,若指定連接優先級,則調整代價係數(代價因子)=初始代價係數/優先級;若指定連接類型,則計算指定連接類型的代價係數a,調整代價係數(代價因子)=初始代價係數×a;若指定數據傾斜度,則調整代價係數(代價因子)=代價係數×傾斜度;若指定其他優化,則計算其他優化存在情況下的代價係數b,調整代價係數(代價因子)=初始代價係數×b。進一步地,在步驟s12中,根據所述代價因子與所述連接操作的代價估計的乘積更新所述連接操作的代價估計。在此,調整好代價係數後,計算連接操作的代價,並得到代價係數和連接操作代價的乘積。需要說明的是,代價因子為最終調整代價的係數,例如,根據連接的優先級,計算一個相對應的因子,通過該因子來調整原先的連接操作的代價,再比如,掃表操作原本的代價因子為1.0,不需要調整,若指定了其他優化,則計算相應的代價因子,通過代價因子來調整(相乘)。在本申請一優選實施例中,對於連接操作,可以設計hints:priority(table1,table2,…)=njointype(table)=join_type;其中,priority(table1,table2,…)指定join的優先級,取值範圍(1.0,100]。例如,設計如下的hint:/*priority(table_a,table_b)=10*/,指定數據表table_a和數據表table_b的連接優先級。在對table_a和table_b的連接做代價估算時,根據指定的優先級適當修正估算結果,以至生成合適的連接順序。同樣還可以為參與連接的全體數據集的子集指定連接優先級,例如:/*+priority(table_a,table_b,table_c)=20*/,修正table_a、table_b和table_c整體作為子查詢的連接代價估算。通過這種方式,可以讓部分子集先做連接操作,而不是將其拆解開來,各自參與其他連接運算。為cbo引入估算修正,即使在估算誤差很大的情況下,優化器依然可以生產性能很好的執行計劃。需要說明的是,上述jointype(table)指定連接類型,如資料庫系統中的常見類型mapjoin、lookupjoin、bucketjoin等,例如/*+jointype(table_a)=mapjoin*/指定table_a可以做mapsidejoin。優化器選擇mapsidejoin的前提是參與連接的數據集中存在規模較小的數據集,因而當對數據集規模的估算存在誤差時,可以用hints的形式確保存在適用mapsidejoin的小規模數據集。進一步地,當所述操作樹的操作類型為聚合操作時,在步驟s12中,確定待調整的代價估計為所述聚合操作的代價估計,基於所述聚合操作的指定選擇確定調整因子,根據所述調整因子調整所述聚合操作的代價估計。在本申請一實施例中,對於聚合後數據集規模的估算在優化中有很大的作用,當聚合率高的時候,提前對參與連接的數據集去重(聚合),可以減少運算量,提高執行效率;對於已經去重的數據集還可以改用效率更高的連接算法,假定數據均勻分布,則常規聚合的結果估算為聚合欄位的ndv,當數據傾斜時,或者其他原因造成估算誤差大時,通過以下方式進行矯正代價估算:進一步地,在步驟s12中,若所述聚合操作的指定選擇為聚合率,則確定調整因子為所述聚合率,更新所述聚合率的值,根據更新後的聚合率的值計算代價因子,並根據所述代價因子調整所述聚合操作的代價估計;若所述聚合操作的指定選擇為傾斜率,則確定調整因子為所述傾斜率,根據所述傾斜率及所述聚合操作的聚合率更新所述聚合率的值,根據更新後的聚合率的值計算代價因子,並根據所述代價因子調整所述聚合操作的代價估計。在本申請一實施例中,進行聚合操作的代價估計時,若指定了聚合率,則改變聚合操作的聚合率,若指定了傾斜率,則改變聚合操作的聚合率=原聚合率×傾斜率,進一步地,根據所述聚合率與所述聚合操作的代價估計的乘積更新所述聚合操作的代價估計,在此,更新聚合率的值後,計算聚合操作的代價,並得到操作代價與更新後的聚合率的值的乘積。可以理解的是,可以使用hints矯正代價估計,指定聚合率:aggregateration(op)=n,其中,aggregateration(op)的取值範圍為(0.1,1.0]。進一步地,所述方法還包括:通過hints、配置文件及新增語法中任一種或任幾種組合的方式將所述統計信息的數據表存在其他優化方式的信息進行發送至所述操作樹。在本申請一實施例中,可以設計hint:optimizations(table)={opt1,opt2},將其它優化的信息告知cbo,從而使得cbo可以感知其他優化器對操作樹的優化,將其他優化納入到代價模型中綜合考量,進而生成全局最優執行計劃。在本申請一優選實施例中,cbo整體代價估計模型的改進可以通過以下偽代碼表示:其中,getcostof(operator)表示原始cbo模型對於操作的代價估算;getcostfactorfromopt表示從具體的參數中計算出代價因子,取值範圍(0,1.0],用來調整估算的代價,參數不同,估算方法不同,在此,通常優化效果越好,取值越小;getcostfactorjointype表示根據join類型計算出代價因子,取值範圍(0,10],用來調整估算的代價,join類型不同,估算方法不同,實際取值根據資料庫系統中不同join的性能來決定,性能越好的join類型,取值越小;返回值cost表示改進後的代價估算值。綜上所述,通過本申請所述的代價估計的方法,解決了傳統代價優化器存在的統計信息的完備性和代價估算的準確性之間的矛盾;通過人工信息注入的方式(如hints),提高sql的代價優化器代價估計的準確性,從而生成性能更好的執行計劃;改進sql的代價優化器,使其感知其他優化的效果,從而生成全局更優的執行計劃。圖3示出根據本申請的另一個方面提供的一種代價估計的設備結構示意圖,所述設備包括:估算裝置11、優化裝置12和累積裝置13,其中,估算裝置11,用於根據操作樹的操作類型確定對應的代價估計方式,基於所述代價估計方式及獲取到的原始統計信息確定所述操作類型的代價估計;優化裝置12,用於確定待調整的代價估計,基於所述待調整的代價估計對應的操作類型確定調整因子,根據所述調整因子調整所述待調整的代價估計;累積裝置13,用於根據未調整的代價估計及調整後的代價估計確定所述操作樹的累積代價估計。從而解決傳統代價優化器中存在的統計信息的完備性和代價估算的準確性之間的矛盾,進一步地,本申請所述設備包括:執行裝置14,用於根據所述累積代價優化結構化查詢語言語句對應的執行計劃。本申請所述的代價估計的方法應用於資料庫系統中sql的優化,提高sql的代價優化器代價估計的準確性,從而生成性能更好的執行計劃。估算裝置11,用於根據操作樹的操作類型確定對應的代價估計方式,基於所述代價估計方式及獲取到的統計信息確定所述操作類型的代價估計;在此,一棵操作樹由不同的操作符構成,每一種操作符代表一類操作,基本的操作包括掃表、過濾、連接、投影、聚合、選擇等,如圖2所示的一顆典型的操作樹示意圖,調整操作樹上的不同操作,估算每一步操作的代價,最終生成一顆累積代價最小的操作樹,生成執行計劃,而不同操作類型的代價估算方法不同,因此需要確定操作類型,採用對應的代價估計方式,進行每一步操作的代價估計。需要說明的是,在資料庫系統中,編譯後的sql語句會被表示為某種內部形式,可稱為操作樹(operatortree),統計信息為後續代價估算的數據基礎,精良的代價估算算法依賴於完備的統計信息,在本申請一實施例中,獲取到的原始統計信息的缺失可以通過人工補充,統計信息和代價估算的誤差還可以通過人工矯正,通過一些額外途徑分析或獲取到數據集更加精準的信息。在本申請一實施例中,所述設備包括統計信息矯正裝置(未示出),可以用於通過hints的方式對所述初步估算後的統計信息進行矯正,得到矯正後的統計信息。在此,矯正cbo代價估算模型的實現方式有多種,可以採用sql中hints的方式為cbo提供額外信息,還可以通過添加新的語法、配置文件等方式靈活設置,在本申請實施例中,通過hints的方式僅為舉例。統計信息本身的誤差通過hints的方式消除,例如,若估算的ndv誤差較大,可以用如下方式矯正:/*+ndv(col)=value*/,或者矯正某一屬性的最大值:/*+max(col)=value*/。對於其他統計信息如表級和列級存在的誤差,也可以通過hints的方式進行矯正,通過hints方式矯正統計信息,從而保證了代價估算的準確性。在上述實施例中,ndv(numberofdistinctvalue,異值數)從統計信息中得到。在本申請一實施例中,所述操作樹的操作類型包括以下至少任一項:掃表操作、過濾操作、連接操作及聚合操作。在本申請一實施例中,矯正代價優化器中價估算模型可對操作類型中掃表操作、過濾操作、連接操作及聚合操作中的任一種或任幾種組合中的代價估算進行矯正,提高sql的代價優化器代價估計的準確性,從而生成性能更好的執行計劃。優化裝置12,用於確定待調整的代價估計,基於所述待調整的代價估計對應的操作類型確定調整因子,根據所述調整因子調整所述待調整的代價估計;在此,對於過濾、聚合等操作的代價估算,通過調整因子進行調整代價估計,從而減少數據傾斜的場景的代價估算,因不同的操作類型的代價,估計算法不同,因此需要確定待調整的代價估計,可能是需要優化過濾操作、連接操作、聚合操作等操作中的一種操作或任幾種操作,進一步地提高操作樹的代價估算的準確性。需要說明的是,調整因子包括謂詞的選擇率、連接的優先級、連接類型、聚合率、連接率、代價因子等會影響每一操作的代價估計的因素。累積裝置13,用於根據未調整的代價估計及調整後的代價估計確定所述操作樹的累積代價估計。在一實施例中,例如,掃表操作的代價估計為a,未進行調整,過濾操作時的代價估算算法進行優化,得到調整後的代價估計b』,連接操作的代價估算算法進行優化,得到調整後的代價估計c』,聚合操作等其他操作的代價估計均未調整,則操作樹的最終代價是由未進行優化估算算法的操作類型的代價估計(比如代價估計a)與進行優化估算算法的操作類型的代價估計(比如代價估計b』、c』)的累積代價估計,當然,可以理解的是,操作樹的每一操作類型的代價估算算法均可進行優化,或部分進行優化。其中,具體優化操作類型的估算算法可以通過如下方式實現:進一步地,當所述操作樹的操作類型為過濾操作時,優化裝置12,用於確定待調整的代價估計為所述過濾操作的代價估計,基於所述過濾操作的指定選擇確定調整因子,根據所述調整因子調整所述過濾操作的代價估計。在本申請一實施例中,過濾操作的代價與謂詞的選擇率相關,不同形式的謂詞,其選擇率的估算算法不同,假定數據均勻分布,則恆等謂詞(例如col=value)的選擇率用該列的1/ndv估算,範圍謂詞的選擇率則可以估算為範圍佔比。因此可通過調整選擇率可對過濾操作進行優化,而選擇率與ndv有關,進而可通過矯正ndv的方式可減少估算的誤差。可通過以下方式進行實現:進一步地,優化裝置12,用於若所述過濾操作的指定選擇為異值數,則確定調整因子,並根據所述調整因子更新所述異值數的值,根據更新後的異值數的值調整所述過濾操作的代價估計;若所述過濾操作的指定選擇為選擇率(selectivity),則從大於0且小於等於1的範圍中確定調整因子,並根據確定的調整因子更新所述選擇率的值,根據更新後的選擇率的值調整所述過濾操作的代價估計;若所述過濾操作的指定選擇為數據傾斜度(skew-ratio),則從大於0且小於等於10的範圍中確定調整因子,並根據確定的調整因子更新所述數據傾斜度的值,根據更新後的數據傾斜度的值調整所述過濾操作的代價估計。在本申請一實施例中,通過hints指定謂詞(predicate)的選擇率(value):/*+selectivity(predicate)=value*/和傾斜度/*+skew(table)=value*/,selectivity(predicate)的取值範圍為(0,1.0],skew(table)的取值範圍為(1.0,10.0],具體地為若指定了異值數(ndv),則改變該過濾操作的異值數的值,若指定了選擇率,則改變過濾操作的選擇率的值,若指定了數據傾斜度,則改變該過濾操作數據傾斜度的值,若指定了其他情況,進行相應處理。根據上述指定操作確定調整因子對過濾操作的代價估算進行優化,更新過濾操作,重新計算過濾操作的代價。通過指定值(指定異值數、選擇率等的值),既節省了複雜的運算,又避免了cbo對於選擇率的錯誤估計,對過度傾斜的表,cbo可以針對性選擇連接的類型。進一步地,當所述操作樹的操作類型為連接操作時,優化裝置12,用於確定待調整的代價估計為所述連接操作的代價估計,基於所述連接操作的指定選擇確定調整因子,根據確定的調整因子計算代價因子,根據所述代價因子調整所述連接操作的代價估計。在此,連接操作需要估算參與連接的數據集的規模和連接後數據集的規模,參與連接的數據集往往從原始數據集經過過濾後得到,其數據集規模與謂詞的過濾率相關,連接後的數據集規模的估算可以通過將連接謂詞作為事實表的過濾條件處理,謂詞對維度表的過濾率即為事實表的過濾率。連接操作代價依賴於很多因素,其代價估計會直接影響到連接順序和算法的選擇,對性能的影響非常大。其中,代價因子為最終調整代價的係數,在以下實施例中,代價因子與代價係數可互換使用,通過調整代價因子間接的調整代價估計,在本申請一實施例中,可以通過幹預的方式,指定或者修正連接順序或者連接算法,確定代價係數,從而調整連接操作的代價估計。具體地,通過以下方式實現:在本申請一實施例中,優化裝置12,用於若所述連接操作的指定選擇為連接優先級,則確定調整因子為所述連接優先級,根據預設的代價因子及所述優先級確定所述連接操作的代價因子;若所述連接操作的指定選擇為連接類型,則確定調整因子為所述連接類型,計算所述連接類型的代價因子,並根據預設的代價因子及所述連接類型的代價因子確定所述連接操作的代價因子;若所述連接操作的指定選擇為數據傾斜度,則確定調整因子為所述數據傾斜度,根據所述預設的代價因子及所述數據傾斜度確定所述連接操作的代價因子;若所述連接操作的指定選擇為其他優化,則確定其他優化對應的調整因子,計算其他優化對應的代價因子,根據預設的代價因子及所述其他優化對應的代價因子確定所述連接操作的代價因子。在此,若操作符的類型是連接,表示是連接操作,則首先定義初始代價係數,若指定連接優先級,則調整代價係數(代價因子)=初始代價係數/優先級;若指定連接類型,則計算指定連接類型的代價係數a,調整代價係數(代價因子)=初始代價係數×a;若指定數據傾斜度,則調整代價係數(代價因子)=代價係數×傾斜度;若指定其他優化,則計算其他優化存在情況下的代價係數b,調整代價係數(代價因子)=初始代價係數×b。進一步地,優化裝置12,用於根據所述代價因子與所述連接操作的代價估計的乘積更新所述連接操作的代價估計。在此,調整好代價係數後,計算連接操作的代價,並得到代價係數和連接操作代價的乘積。需要說明的是,代價因子為最終調整代價的係數,例如,根據連接的優先級,計算一個相對應的因子,通過該因子來調整原先的連接操作的代價,再比如,掃表操作原本的代價因子為1.0,不需要調整,若指定了其他優化,則計算相應的代價因子,通過代價因子來調整(相乘)。在本申請一優選實施例中,對於連接操作,可以設計hints:priority(table1,table2,…)=njointype(table)=join_type;其中,priority(table1,table2,…)指定join的優先級,取值範圍(1.0,100]。例如,設計如下的hint:/*priority(table_a,table_b)=10*/,指定數據表table_a和數據表table_b的連接優先級。在對table_a和table_b的連接做代價估算時,根據指定的優先級適當修正估算結果,以至生成合適的連接順序。同樣還可以為參與連接的全體數據集的子集指定連接優先級,例如:/*+priority(table_a,table_b,table_c)=20*/,修正table_a、table_b和table_c整體作為子查詢的連接代價估算。通過這種方式,可以讓部分子集先做連接操作,而不是將其拆解開來,各自參與其他連接運算。為cbo引入估算修正,即使在估算誤差很大的情況下,優化器依然可以生產性能很好的執行計劃。需要說明的是,上述jointype(table)指定連接類型,如資料庫系統中的常見類型mapjoin、lookupjoin、bucketjoin等,例如/*+jointype(table_a)=mapjoin*/指定table_a可以做mapsidejoin。優化器選擇mapsidejoin的前提是參與連接的數據集中存在規模較小的數據集,因而當對數據集規模的估算存在誤差時,可以用hints的形式確保存在適用mapsidejoin的小規模數據集。進一步地,當所述操作樹的操作類型為聚合操作時,優化裝置12,用於確定待調整的代價估計為所述聚合操作的代價估計,基於所述聚合操作的指定選擇確定調整因子,根據所述調整因子調整所述聚合操作的代價估計。在本申請一實施例中,對於聚合後數據集規模的估算在優化中有很大的作用,當聚合率高的時候,提前對參與連接的數據集去重(聚合),可以減少運算量,提高執行效率;對於已經去重的數據集還可以改用效率更高的連接算法,假定數據均勻分布,則常規聚合的結果估算為聚合欄位的ndv,當數據傾斜時,或者其他原因造成估算誤差大時,通過以下方式進行矯正代價估算:進一步地,優化裝置12,用於若所述聚合操作的指定選擇為聚合率,則確定調整因子為所述聚合率,更新所述聚合率的值,根據更新後的聚合率的值計算代價因子,並根據所述代價因子調整所述聚合操作的代價估計;若所述聚合操作的指定選擇為傾斜率,則確定調整因子為所述傾斜率,根據所述傾斜率及所述聚合操作的聚合率更新所述聚合率的值,根據更新後的聚合率的值計算代價因子,並根據所述代價因子調整所述聚合操作的代價估計。在本申請一實施例中,進行聚合操作的代價估計時,若指定了聚合率,則改變聚合操作的聚合率,若指定了傾斜率,則改變聚合操作的聚合率=原聚合率×傾斜率,進一步地,根據所述聚合率與所述聚合操作的代價估計的乘積更新所述聚合操作的代價估計,在此,更新聚合率的值後,計算聚合操作的代價,並得到操作代價與更新後的聚合率的值的乘積。可以理解的是,可以使用hints矯正代價估計,指定聚合率:aggregateration(op)=n,其中,aggregateration(op)的取值範圍為(0.1,1.0]。進一步地,所述設備還包括:發送裝置,用於通過hints、配置文件及新增語法中任一種或任幾種組合的方式將所述統計信息的數據表存在其他優化方式的信息進行發送至所述操作樹。在本申請一實施例中,可以設計hint:optimizations(table)={opt1,opt2},將其它優化的信息告知cbo,從而使得cbo可以感知其他優化器對操作樹的優化,將其他優化納入到代價模型中綜合考量,進而生成全局最優執行計劃。在本申請一優選實施例中,cbo整體代價估計模型的改進可以通過以下偽代碼表示:其中,getcostof(operator)表示原始cbo模型對於操作的代價估算;getcostfactorfromopt表示從具體的參數中計算出代價因子,取值範圍(0,1.0],用來調整估算的代價,參數不同,估算方法不同,在此,通常優化效果越好,取值越小;getcostfactorjointype表示根據join類型計算出代價因子,取值範圍(0,10],用來調整估算的代價,join類型不同,估算方法不同,實際取值根據資料庫系統中不同join的性能來決定,性能越好的join類型,取值越小;返回值cost表示改進後的代價估算值。綜上所述,通過本申請所述設備用於代價估計,解決了傳統代價優化器存在的統計信息的完備性和代價估算的準確性之間的矛盾;通過人工信息注入的方式(如hints),提高sql的代價優化器代價估計的準確性,從而生成性能更好的執行計劃;改進sql的代價優化器,使其感知其他優化的效果,從而生成全局更優的執行計劃。根據本申請再一個方面,還提供了一種基於計算的設備,包括:處理器;以及被安排成存儲計算機可執行指令的存儲器,所述可執行指令在被執行時使所述處理器:根據操作樹的操作類型確定對應的代價估計方式,基於所述代價估計方式及獲取到的原始統計信息確定所述操作類型的代價估計;確定待調整的代價估計,基於所述待調整的代價估計對應的操作類型確定調整因子,根據所述調整因子調整所述待調整的代價估計;根據未調整的代價估計及調整後的代價估計確定所述操作樹的累積代價估計。顯然,本領域的技術人員可以對本申請進行各種改動和變型而不脫離本申請的精神和範圍。這樣,倘若本申請的這些修改和變型屬於本申請權利要求及其等同技術的範圍之內,則本申請也意圖包含這些改動和變型在內。需要注意的是,本申請可在軟體和/或軟體與硬體的組合體中被實施,例如,可採用專用集成電路(asic)、通用目的計算機或任何其他類似硬體設備來實現。在一個實施例中,本申請的軟體程序可以通過處理器執行以實現上文所述步驟或功能。同樣地,本申請的軟體程序(包括相關的數據結構)可以被存儲到計算機可讀記錄介質中,例如,ram存儲器,磁或光碟機動器或軟磁碟及類似設備。另外,本申請的一些步驟或功能可採用硬體來實現,例如,作為與處理器配合從而執行各個步驟或功能的電路。另外,本申請的一部分可被應用為電腦程式產品,例如電腦程式指令,當其被計算機執行時,通過該計算機的操作,可以調用或提供根據本申請的方法和/或技術方案。而調用本申請的方法的程序指令,可能被存儲在固定的或可移動的記錄介質中,和/或通過廣播或其他信號承載媒體中的數據流而被傳輸,和/或被存儲在根據所述程序指令運行的計算機設備的工作存儲器中。在此,根據本申請的一個實施例包括一個裝置,該裝置包括用於存儲電腦程式指令的存儲器和用於執行程序指令的處理器,其中,當該電腦程式指令被該處理器執行時,觸發該裝置運行基於前述根據本申請的多個實施例的方法和/或技術方案。對於本領域技術人員而言,顯然本申請不限於上述示範性實施例的細節,而且在不背離本申請的精神或基本特徵的情況下,能夠以其他的具體形式實現本申請。因此,無論從哪一點來看,均應將實施例看作是示範性的,而且是非限制性的,本申請的範圍由所附權利要求而不是上述說明限定,因此旨在將落在權利要求的等同要件的含義和範圍內的所有變化涵括在本申請內。不應將權利要求中的任何附圖標記視為限制所涉及的權利要求。此外,顯然「包括」一詞不排除其他單元或步驟,單數不排除複數。裝置權利要求中陳述的多個單元或裝置也可以由一個單元或裝置通過軟體或者硬體來實現。第一,第二等詞語用來表示名稱,而並不表示任何特定的順序。當前第1頁12當前第1頁12

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀