基於學習的引數化查詢優化方法

Mondo 科技 更新 2024-02-20

引數化查詢是一類具有相同模板且僅在謂詞繫結引數上有所不同的查詢,它們在現代資料庫應用程式中被廣泛使用。 他們執行重複的動作,這提供了優化其效能的機會。

然而,許多當前的商業資料庫通過簡單地優化查詢中的第乙個查詢例項(或使用者指定的例項)來處理引數化查詢,快取其最佳計畫並將其重用於後續查詢例項。 雖然該方法的優化時間最小化,但由於不同查詢例項的最優計畫不同,快取計畫的執行可能會任意次優,這在實際應用場景中並不適用

大多數傳統的優化方法都需要對查詢優化器進行許多假設,但這些假設通常不適合實際場景。 幸運的是,隨著機器學習的興起,這些問題可以得到有效的解決。 本期我們將重點介紹發表在VLDB2022和SIGMOD2023上的兩篇文章

:《leveraging query logs and machine learning for parametric query optimization》

:《kepler: robust learning for faster parametric query optimization》

** 1 亮點

本文將引數化查詢優化解耦為兩個問題:

1) populatecache:快取查詢模板的 k 個計畫;

2) getplan:對於每個查詢例項,從快取計畫中選擇最佳計畫。

本**的演算法架構如下圖所示。 有兩個主要模組:populatecache 和 getplan 模組。

PopulateCache 使用查詢日誌中的資訊來快取所有查詢例項的 K 個計畫。 GetPlan 模組首先通過與優化器互動來收集 k 個計畫例項和查詢例項之間的成本資訊,並使用此資訊來訓練機器學習模型。 在 DBMS 中部署經過訓練的模型。 當查詢例項到達時,可以快速確定例項的最佳計畫。

PolulateCache 模組負責為給定的引數化查詢標識一組快取計畫,搜尋階段使用兩個優化器 API:

優化器呼叫:返回優化器為查詢例項選擇的計畫;

recost call:返回查詢例項的優化器預估成本和對應的計畫;

演算法流程如下:

plan-collection phase:呼叫優化器呼叫,收集查詢日誌中 n 個查詢例項的候選計畫;

計畫-重計費用階段:對每個查詢例項和每個候選計畫呼叫重計費用呼叫,以形成計畫-重計費用矩陣。

k-set 識別階段:貪婪演算法用於使用計畫-重計費矩陣快取 k 個計畫,以最小化次樂觀。

getplan 模組負責為給定的查詢例項選擇乙個快取的 k 個計畫來執行。 GetPlan 演算法可以考慮兩個目標:最小化優化器估計的成本,或最小化 k 個快取計畫實際執行的成本。

考慮目標 1:使用計畫-重成本矩陣訓練監督式 ML 模型,同時考慮分類和回歸。

考慮目標 2:使用基於多臂強盜的強化學習來訓練模型。

** 2 亮點

該文提出一種端到端的、基於學習的引數化查詢優化方法,旨在減少查詢優化時間,提高查詢執行效能。

克卜勒還將問題解耦為兩部分:計畫生成和基於學習的計畫預測。 有三個主要階段:計畫生成策略、訓練查詢執行階段和魯棒神經網路模型。

如上圖所示,查詢日誌中的查詢例項輸入給 Kepler Trainer,Kepler Trainer 首先生成乙個候選計畫,然後收集與候選計畫相關的執行資訊,將其作為訓練資料來訓練機器學習模型,訓練後將模型部署到 DBMS 中。 當查詢例項到達時,使用 kepler 客戶端進行最佳計畫和執行。

在本文中,我們提出了一種稱為行計數演變(RCE)的候選計畫生成演算法,該演算法通過擾動優化器的基數估計來生成候選計畫。

該演算法的思想是,基數的錯誤估計是優化器次優的主要原因,候選計畫生成階段只需要包含乙個例項的最優計畫,而不是選擇單個最優計畫。

RCE演算法首先為查詢例項生成最優計畫,然後在指數區間範圍內擾動其子計畫的連線基數,多次重複,多次迭代,最後將所有生成的計畫選為候選計畫。 具體示例如下:

使用 RCE 演算法,生成的候選計畫可能會優於優化器生成的候選計畫。 由於優化器可能存在基數估計誤差,因此 RCE 通過不斷擾動基數估計來生成正確基數的最佳計畫。

獲得候選計畫集後,將對每個查詢例項的工作負載執行每個計畫,並收集真實執行時間以訓練監督最優計畫模型。 上述過程比較繁瑣,本文提出了一些加速訓練資料採集的機制,如併行執行和自適應超時機制。

使用生成的真實執行資料訓練神經網路,以便為每個查詢例項進行最佳規劃。 其中使用的神經網路是高斯神經過程的譜歸一化,保證了網路的穩定性和訓練的收斂性,可以為世界提供不確定性估計。 當不確定性估計值大於某個閾值時,由優化器選擇執行計畫。 在一定程度上避免了效能回歸。

總結

以上兩者都將引數化查詢解耦為兩部分,即 populatecache 和 getplan。 兩者的比較如下表所示。

基於機器學習模型的演算法在規劃方面表現良好,但其訓練資料收集過程成本高昂,且模型不易泛化和更新。 因此,現有的引數化查詢優化方法仍有一定的改進空間。

本文圖解**:

1)kapil vaidya & anshuman dutt, 《leveraging query logs and machine learning for parametric query optimization》, 2022 vldb,2)lyric doshi & vincent zhuang, 《kepler: robust learning for faster parametric query optimization》, 2023 sigmod,

相關問題答案

    核脊回歸中核法引數優化策略的探索

    核嶺回歸是一種常用的非線性回歸方法,它可以通過使用核函式將輸入要素對映到高維空間來處理非線性關係。在核嶺回歸中,選擇適當的核函式和調優引數對於模型效能至關重要。本文將分析核脊回歸中核方法的引數優化策略,以期提供一種有效的引數選擇方法,以提高模型效能。.介紹核脊的回歸。核嶺回歸是一種在嶺回歸的基礎上引...

    強化學習中的策略梯度優化方法

    強化學習是一種機器學習方法,它通過智慧型體與環境之間的互動來學習最佳決策策略。在強化學習中,策略梯度優化方法是一種常用且有效的演算法,通過直接優化策略來找到最優策略。本文將介紹策略梯度優化方法的基本原理 主要演算法,以及實際應用中的一些挑戰和改進方向。.戰略梯度優化方法的基本原理。策略梯度優化方法的...

    基於深度學習習的結構化資料預測模型

    隨著大資料時代的到來,結構化資料的分析變得越來越重要。傳統模型在處理結構化資料時面臨一些挑戰,例如特徵工程的複雜性和模型表達能力的侷限性。作為強大的機器習技術,深度習可以通過多層神經網路的結構和大規模資料的訓練來有效地解決這些問題。本文將介紹基於深度學習習的結構化資料模型的原理和應用,及其在資料科學...

    深度學習模型中的泛化能力優化方法

    隨著深度學習在各個領域的廣泛應用,提高模型的泛化能力已成為研究和實踐的重要課題。深度學習模型的泛化能力是指模型在看不見的資料上表現良好的能力,而不僅僅是在訓練資料上。本文將介紹深度學習模型中的泛化能力優化方法,以及如何通過各種手段提高模型的泛化能力,使其在實際應用中更加可靠和魯棒。.資料增強。資料增...

    靈活性和適應性 高中生學習方法的多樣化使用

    高中生是一群獨特的人,他們承載著未來的希望,背負著無盡的學業壓力。在這個成長的關鍵階段,學習方法是自己成長道路上最寶貴的財富,如何有效掌握學習方法成為每個高中生必須思考和探索的問題。也許,我們總會被那些高分學生所吸引,他們似乎輕鬆駕馭知識的海洋,取得優異的成績。然而,成功的背後往往隱藏著無數個日日夜...