章彬慧,宋春花,牛保寧,柳浩楠,陶溫霞,程永強
太原理工大學 信息與計算機學院,山西 晉中 030600
查詢是數據庫系統的主要負載,查詢執行的效率決定數據庫系統的性能。為查詢選擇合適的執行計劃是提高數據庫系統的性能、最終提升應用系統性能的關鍵。目前數據庫系統在選擇執行計劃時由于:(1)代價模型(cost model)[1]對執行計劃的代價估計不準確;(2)很少考慮查詢之間的相互影響——查詢交互(query interaction)[2],孤立地為查詢選擇執行計劃,導致選擇的執行計劃很難在不同場景下都是合適的。這里的“合適的”是指查詢的執行不僅是高效的,同時它的執行不會顯著降低系統的效率。
一方面,代價估計不準、估算復雜查詢的成本太高導致查詢優化器無法為查詢選擇最優的執行計劃。執行計劃是數據庫系統執行查詢語句的操作組合,查詢優化器通常將其表示為一棵二叉樹。一般地,一個查詢有多種執行計劃,這些執行計劃返回相同的結果集[3],但是它們的執行代價差別很大。查詢優化器基于左深樹(left-deep tree),按照一定的搜索策略,如System-R[4]算法、基因算法[5]等,為查詢選擇候選執行計劃(candidate execution plan),其原則是在不壞的執行計劃(左深樹)中,根據表和索引的統計信息,估計各個執行計劃的代價,從中選出較優的執行方案。
另一方面,多個查詢并發運行是數據庫系統運行的常態,選擇執行計劃時應該考慮查詢間的相互作用。并發運行的一組查詢被稱作查詢組合(query mix)。在查詢組合中,查詢之間會相互影響,產生查詢交互。查詢交互的本質是并發查詢對系統資源的爭用或共享,通常引起查詢使用資源量或時間的改變,也就是執行計劃代價的改變,從而導致查詢執行性能的降低或提高[6-7]。例如:一個查詢讀入緩沖池的數據,被另一個查詢利用,減少對I/O資源的使用;多個查詢同時進行多個外排序與逐一進行排序相比,由于用于排序的內存不同,前者需要更多的I/O。由于查詢交互極其復雜,一個查詢在不同查詢組合中經受的查詢交互千差萬別,執行計劃代價改變程度也不同。查詢優化器基于代價模型選擇的執行計劃在一個查詢組合中是合適的,在另外一個查詢組合中很可能不是合適的。因此,執行計劃的選擇需全面考慮當前查詢組合下的查詢交互因素,才能找到合適的執行計劃。在實踐中,查詢優化器在選擇執行計劃時,把一些系統配置參數,如并行度(multi programming level,MPL)、緩沖池的大小、排序堆的大小等作為選擇執行計劃的因素。這樣做,或多或少能夠考慮一些查詢交互因素,但是,這種參數是靜態的,選擇的執行計劃也是靜態的[7],覆蓋的查詢交互因素不足以全面反映查詢交互的動態變化。
綜上所述,為了能夠選擇適合實際場景的執行計劃,需要綜合考慮查詢本身的代價及查詢交互因素。這是一項復雜的任務,很難用一個簡單的數學模型來描述。深度學習的出現和其在數據管理中的應用,為解決上述問題提供了新的思路:構建深度學習網絡,融合反映查詢執行代價的查詢組合執行計劃特征(features of plans,FoP)和反映查詢交互的查詢組合交互特征(features of query interaction,FQI),組成查詢組合特征(query mix features,QMF),作為網絡的輸入,為查詢動態選擇執行計劃。
本文針對周期性地運行一批固定查詢的聯機分析處理(on-line analytical processing,OLAP)場景,提出用深度學習實現并發查詢執行計劃的選擇。
問題描述:一個數據庫系統D={M,R,T},其中M={qi|i=1,2,…,m}表示正在運行的查詢組合,R表示查詢組合中查詢間的查詢交互,T表示數據庫系統中關系的集合。當查詢qj到來時,從查詢優化器為其篩選的候選執行計劃集合Q={qj_c|c=1,2,…}中,選擇一個合適的執行計劃,使得新查詢組合的執行效率最高。
本文的創新點如下:
(1)使用LSTM與FCN構成的LSTM-FCN實現并發查詢執行計劃的選擇。用LSTM學習時域特征、FCN實現特征融合及分類,為查詢動態選擇適合當前執行場景的執行計劃。
(2)同時考慮執行計劃與查詢交互兩方面的因素為查詢選擇執行計劃。設計充分體現查詢組合中所有查詢特征的編碼方式,將查詢組合執行計劃與查詢組合交互度量值QueryRating[6]共同作為神經網絡輸入特征來源。
本章首先介紹當前查詢優化器選擇執行計劃的方法,然后討論考慮查詢交互因素、選擇執行計劃的方法,最后討論深度學習在選擇執行計劃上的應用。
一條查詢語句經過解析器轉換為查詢樹,查詢優化器以查詢樹作為輸入,根據關系訪問方式、連接方式及連接順序生成可能的執行計劃,然后依據代價模型[1]選擇代價最小的方案,作為該查詢的較優執行計劃,并制定一個完整的規劃樹傳遞給執行器[4]。主流數據庫管理系統的查詢優化器都是基于代價策略選擇執行計劃。改善代價估計不準確的主要途徑是通過修正統計信息[8-9]。優化器為并發查詢選擇執行計劃時,通過一些靜態的參數[10-12],如并行度、緩沖池的大小、排序堆的大小等,體現查詢交互的影響。參數固定時,選擇的執行計劃也固定不變,參數配置不能準確描述查詢交互。
TRating[7]模型只考慮查詢交互因素,為并發查詢選擇執行計劃,取得了較好的效果,顯示查詢交互是影響執行計劃選擇的主要因素。
BAL(buffer access latency)[13]、QueryRating[6]通過度量查詢交互來預測查詢響應時間,提出了度量查詢交互的方法。BAL方法主要考慮邏輯讀/寫代價,以查詢并發與單獨運行的時間差衡量查詢交互。QueryRating方法綜合考慮邏輯讀/寫、查詢計算的代價等,以查詢兩兩運行與單獨運行時響應時間的比值,量化兩個查詢之間的查詢交互。TRating提出的QIs方法[7]認為,查詢單獨運行的響應時長會影響其加入查詢組合后受到查詢交互的持續時長。
上述模型和方法揭示了查詢交互是影響查詢執行的主要因素。其他一些研究雖然沒有提出查詢交互的概念,但是實質上利用查詢交互中的查詢合作來優化查詢的執行,包括查詢結果集的共享訪問[14]、查詢間數據的共享掃描[15]及操作符的共享[16]等并發查詢優化方法。并發查詢執行過程中,查詢間不僅存在查詢合作,更多的應該是查詢競爭。查詢交互反映了查詢間的合作和競爭關系。
本文采用QueryRating度量查詢兩兩之間的交互,構造查詢組合交互特征FQI,把查詢交互作為主要因素為并發查詢選擇執行計劃。
隨著人工智能的發展,近幾年研究人員將深度學習與數據庫性能優化問題相結合取得了較好的成果[8-9,17],這些研究主要側重于改進查詢優化器代價模型或提高基數估計準確率。使用LSTM,將執行計劃作為模型輸入,為特定查詢預測響應時間[18]達到了較高的準確率。基于強化學習的Neo(neural optimizer)[19],利用神經網絡調整搜索策略,為查詢生成較優的執行計劃。使用圖嵌入對并發查詢進行查詢性能預測[20],圖模型的每個頂點是執行計劃中的一個操作,兩個頂點之間的邊表示它們之間的相關性,例如,共享相同的表、索引或競爭的資源。
基于現有代價模型很難準確估計執行計劃的代價、復雜多變的查詢交互使得簡單的數學模型無法作為選擇執行計劃的依據。本文提出用LSTM-FCN,同時考慮執行計劃與查詢交互,為查詢動態選擇適合當前查詢組合的執行計劃。
用深度學習神經網絡解決問題的關鍵是:獲取樣本數據,構造合適的輸入特征,選擇適合描述問題的網絡模型。按照這一思路,2.1節對問題進行分析,討論解決問題的思路。對于樣本數據的獲取,2.2節介紹查詢組合交互信息的獲取及預測標簽的設計與編碼,2.3節討論輸入特征QMF的設計。2.4節,給出LSTM-FCN模型的網絡結構及網絡參數設計。
解決引言中所提問題的關鍵一點是,如何判斷執行效率最高。查詢qj的到來,對M產生了新的查詢交互,引發其本身及M中各查詢執行狀態的改變。可以通過度量這種改變來判斷查詢的執行效率。這種改變具體表現為兩個方面:查詢等待資源時間的改變和查詢獲得資源量的改變(代價的改變)。查詢響應時間是等待時間與執行時間之和,反映了查詢交互的后果,它的變化程度表征了查詢交互的程度。QueryRating[6]用查詢響應時間的變化程度度量兩個查詢之間查詢交互的大小。

其中,tji表示查詢qj與查詢qi并發時qj的響應時間,tj表示查詢qj單獨運行時的響應時間。若Rji小于1,表示查詢qi對查詢qj的執行有促進作用。Rji越小,表示查詢qi對查詢qj的促進作用越強。反之,Rji大于1,表示查詢qi對查詢qj的執行有抑制作用。Rji越大,表示查詢qi對查詢qj的抑制作用越強。Rji等于1,表示兩查詢并發時不存在相互作用。
查詢單獨執行時不需要等待資源,它的響應時間是執行計劃代價的體現。并發查詢的QueryRating值越小,消極查詢交互越小,查詢的執行效率越高。假設查詢qj有執行計劃qj_1、qj_2,它們到來之后受到M的查詢交互作用,QueryRating值前者小于后者。但是M中各查詢與qj_1并發時,QueryRating值大于它們與qj_2并發時的QueryRating值,那么qj_1、M的QueryRating之和可能大于qj_2、M的QueryRating之和,即qj執行效率較高的執行計劃可能降低新查詢組合的執行效率。受到QueryRating的啟發,將查詢qj與M的查詢交互作用之和,作為描述新查詢組合執行效率高低的標準。查詢交互作用之和用QueryRating之和表示。其中qj受到M的QueryRating值越小,表示查詢qj受到M的消極查詢交互越小,qj的執行效率越高。M受到qj的QueryRating值,用M中各查詢受到qj的QueryRating值之和表示,該值越小,表示M的執行效率越高。qj執行效率與M執行效率之和表示qj到來之后,新查詢組合的查詢效率。
需要注意的是,qj到來之后,可能會造成M中各查詢之間查詢交互的調整,本文認為這個影響較小,暫時不予考慮。基于以上分析,將新查詢組合中的QueryRating之和作為判斷其執行效率高低的標準,并以此為目標函數,選擇合適的執行計劃:

其中,RjM和RMj分別表示qj與M并發運行時,qj和M受到對方的查詢交互作用,tjM和tic分別表示qj以候選執行計劃qj_c與M并發運行時,qj和M中的查詢qi的響應時間。
公式(2)中,tjM/tj和tic/ti分別表示在qj以候選執行計劃qj_c與M并發運行的情況下,qj和M中的查詢qi相對于它們單獨運行時響應時間的變化程度。tjM/tj小于1,表示查詢qj以候選執行計劃qj_c加入到M之后,qj_c響應時間變短,M與它的積極查詢交互提升了qj_c的執行效率;反之,降低了qj_c的執行效率。表示查詢qj以候選執行計劃qj_c與M并發運行情況下,M中各查詢響應時間總體的變化程度。該值越小,表示qj_c與M的查詢交互提升了M的執行效率,反之,降低了M的執行效率。表示qj_c到來之后,新查詢組合的響應時間的改變程度。該值越小,表示查詢qj的候選執行計劃qj_c對查詢組合的執行效率提升程度越大,該執行計劃越適合與M并發運行。
在網絡輸入方面,執行計劃表征了查詢執行的代價,從執行計劃中可以提取代價信息,構造FoP。查詢交互往往造成查詢等待資源和執行代價的改變,體現在查詢響應時間中,因此,可以從查詢響應時間的改變中獲取查詢交互信息,構造FQI,進而得到模型輸入特征QMF。
在深度學習網絡的選擇方面,考慮到查詢執行過程中,各操作之間存在一定的時序關系,而LSTM模擬時間關系,持續保留層間關系,可以描述查詢內部的時域特征。FCN融合特征,實現分類。因此,本文使用LSTMFCN實現并發查詢執行計劃的選擇。
根據2.1節的討論,查詢響應時間的變化程度反映了查詢交互的后果。在OLAP場景中,一批查詢周期性運行,查詢qj單獨執行的響應時間及其與查詢組合M并發運行時的響應時間容易獲得。M中各查詢對查詢qj造成的響應時間的改變程度可以表示為:Rj1,Rj2,…,Rji,…,Rjm。基于以上分析,用查詢交互值QueryRating[6]的改變程度反映查詢交互導致的查詢執行代價的改變,進而構造查詢qj受到M的查詢組合交互特征FQI。
公式(2)是評價執行計劃是否合適的指標,因此,將預測標簽定義為與候選執行計劃一一對應c位向量L,L=(lj_1,lj_2,…,lj_c)。L中,與查詢組合M并發執行時,qj合適的執行計劃對應位為1,其余位為0。
根據上面的分析,執行計劃體現查詢的執行代價,不同執行計劃代價不同,執行計劃本身的信息應作為網絡輸入特征來源之一。查詢交互反映查詢組合中查詢間的相互作用,表征查詢執行代價的改變程度,影響執行計劃的選擇,查詢交互也應作為模型輸入特征來源之一。因此,LSTM-FCN的輸入特征應包括兩部分:FoP、FQI。通過向量拼接的方法,得到模型的輸入特征QMF,QMF={FoP,FQI}。其中,FoP從查詢的執行計劃中獲取,FQI從查詢響應時間的變化程度中獲取。下面,使用獨熱編碼(one-hot encoding)對輸入數據進行預處理,把輸入數據變成長度相同的特征,便于神經網絡處理。
2.3.1 FoP的提取與編碼
一個查詢的執行計劃有多個,查詢復雜時,執行計劃數量增多,考慮全部的執行計劃相對困難。因此,本文從查詢優化器得到的候選執行計劃中選擇若干個響應時間不同的計劃作為實驗執行計劃。這些執行計劃反映了查詢的執行代價。
假如有查詢:select r_name,n_name from nation,region where n_regionkey=r_regionkey;對應的查詢執行計劃樹如圖1所示。

圖1 查詢執行計劃樹Fig.1 Query execution plan tree
后續遍歷該執行計劃樹,得到一個操作序列{nation,Hash,region,nation??region},其中,符號??表示關系之間的連接操作,將操作序列中的每一個操作編碼成二進制序列。對查詢組合中所有查詢的執行計劃按照相同的方式進行編碼,生成查詢組合執行計劃特征FoP。
由于操作類型是每個操作的屬性,操作的表是每個操作的作用對象,操作的列是每個操作作用對象的一個準確定位,操作結果行的寬度反映了每個操作的規模,即該操作的復雜度或代價。同時考慮以上四個方面對查詢的每個操作進行編碼,得到的編碼序列可以充分體現查詢的執行代價。將操作列表按照{操作種類,操作的表,操作涉及的表的列,結果行寬度}的格式編碼,可以把執行計劃轉換成二進制串。以執行計劃qj_c為例,具體編碼方式如下:
后續遍歷執行計劃qj_c的計劃樹,得到對應于qj_c的操作序列si_c={pj|j=1,2,…,n},n表示此執行計劃樹中操作個數。對序列中的每個操作提取關鍵特征進行編碼,得到向量pj={ak|k=1,2,3,4}。向量pj具體編碼方式如下:
(1)a1代表操作pj的類型,例如Merge Join、Neated Loop等操作。假設數據庫有d種操作類型,a1則為d位的向量。pj對應位為1,其他位設為0。
(2)a2代表pj在數據庫中操作的關系。假設數據庫有e個關系,a2則為e位的向量。a2中pj操作的關系對應位為1,其他位設為0。
(3)a3代表關系的列。假設關系共有f列,則a3則為f位的向量。關系a2涉及到的列對應位為1,其他位設為0。
(4)a4代表pj操作結果行的平均寬度及每行所占的字節數。將結果行平均寬度劃分成g個區間,所得寬度對應的區間位為1,其他位設為0。
向量pj中向量a1、a2、a3表征查詢操作的特點,a4表征查詢結果的復雜程度。對于查詢組合M,查詢的不同執行計劃看作不同的查詢,則qj到來之后,查詢組合執行計劃特征:

2.3.2 FQI的提取與編碼
構建查詢組合交互特征FQI首要一點是獲取查詢交互信息。查詢qj加入到查詢組合M中之后,其響應時間的變化程度可以表征其受到組合中各查詢的查詢交互。為了更準確地分析qj受到M的查詢交互,本文計算M中每個查詢對qj的查詢交互值,將其作為qj受到的查詢組合交互信息。根據2.2節中的分析,用qj單獨運行及其與M并發時響應時間的改變,反映其代價的變化,進而構造查詢qj受到M的查詢組合交互特征FQI。具體方案如下:
分別計算M中各查詢對qj響應時間的改變程度:Rj1,Rj2,…,Rji,…,Rjm。將它們編碼,作為查詢qj受到M的查詢組合交互特征FQI。編碼方案如下:統計實驗數據中查詢交互值范圍,將查詢交互值編碼為定長h位向量r={(0,1],(1,2],(2,3],…,(h-1,h]},其中h=。為了方便實現查詢交互值的特征化,本文對臨界值“1”的編碼做如下規定:1是查詢間促進或抑制作用的分界線,故將向量r每位設為步長為1的左開右閉區間,當查詢交互值小于或等于1時,視為兩查詢之間的相互作用為積極查詢交互,反之,視為消極查詢交互。查詢組合交互特征如下:

故模型的輸入特征——查詢組合特征為:

一般地,FoP列向量數等于MPL,FQI列向量數等于MPL-1。FoP、FQI行向量數等于待測查詢的候選執行計劃個數。
QMF的編碼及生成過程也稱為查詢組合特征化,特征向量QMF反映了查詢組合的執行代價和運行時執行代價的改變程度。本文從查詢級別提取有效特征QMF,以此作為深度學習神經網絡的輸入,為查詢動態選擇適合其運行環境的執行計劃。
本文LSTM-FCN構建的主要思想是從查詢級的優化入手,首先通過查詢組合的特征化設計表征查詢的屬性,并將其作為模型的輸入特征,其次是選擇合適的深度學習模型,選擇執行計劃。模型的改進上,采用網絡組合的方式將LSTM和FCN結合在一起,用LSTM描述查詢各操作間的相關性,具體表現為操作間的時序關系,在LSTM輸出層后添加FCN層,實現特征的高度融合。輸出層采用全連接層,實現分類。
使用LSTM與FCN的組合LSTM-FCN模型選擇執行計劃,其中將LSTM作為模型的一部分,原因有兩方面:(1)LSTM的輸入門、遺忘門、輸出門描述了特征之間的時序關系,使得模型可以通過記住上一時刻的狀態來動態地調整自身學習過程;(2)查詢組合特征序列較長,LSTM學習長序列的能力較強,避免了傳播過程中可能發生的特征丟失問題。將FCN作為模型的一部分原因是:FCN可以簡單高效地對LSTM層輸出的特征進行融合,同時將特征長度轉換成合適的維度,便于模型的輸出層計算損失。
LSTM層的自我調整保證了執行計劃選擇的動態性,FCN層保證了LSTM-FCN模型的高效性和穩定性。經過特征化后的查詢組合作為模型的輸入,使得LSTM-FCN在保證動態性及高效性的同時,描述查詢的靜態屬性——查詢的操作類型及規模,動態屬性——查詢組合內查詢間的相互作用,從而實現并發查詢執行計劃的動態選擇。第3章中設計相關實驗驗證了本文模型的性能。LSTM-FCN的網絡結構如圖2所示。

圖2 LSTM-FCN的網絡結構Fig.2 Network structure of LSTM-FCN model
其中輸入特征向量是QMF,QMF作為LSTM層初始狀態的輸入向量。LSTM單元的物理結構與內部邏輯關系分別如圖3、4所示。
圖4展示一個LSTM單元內部的運算關系,它將當前時刻的輸入、上一時刻的輸出、狀態三個向量進行運算,得到當前時刻的輸出和狀態。圖4和圖3相對應,圖4中的x(t)就是樣本向量QMF。圖中兩條線相交時,如果有運算關系,則用實心表示,否則用空心表示。其中實心點表示上一時刻的輸出h(t)與當前時刻的輸入通過向量拼接的方式構成一個新的向量。長方形框表示借助一層具有對應激活函數神經單元來實現。

圖3 LSTM單元的物理結構圖Fig.3 Physical structure diagram of LSTM cell

圖4 LSTM單元內部邏輯關系Fig.4 Internal logic relationship of LSTM cell
一個LSTM單元有三個門:遺忘門ft、輸入門it、輸出門ot。其中,每個門對應64個隱含層神經元,每個隱含層都與輸入向量全連接,通過LSTM單元內部計算后,最終得到當前時刻的輸出,大小為64,作為下一時刻LSTM單元的一部分輸入。各門值的計算方法見公式(6)~(10),Wf、Wi、Wo分別表示ft、it、ot對應隱含層神經元之間的權重,bf、bi、bo分別對應各隱含層神經元的偏移量。Ct表示t時刻LSTM單元的記憶,ht表示t時刻LSTM單元輸出。

由公式(6)~(10)得到LSTM層隱藏層參數個數為:hiddenpar=hiddensize×(hiddensize+xt_dim+1)×4,其中hiddensize+xt_dim即為[ht-1,xt]。
FCN層參數個數為(ht+1)×FCNsize,輸出層參數個數為(FCNsize+1)×outputsize。
LSTM-FCN基本參數如表1所列。LSTM輸出層大小為64。LSTM層后增加一層全連接層進行特征融合,神經元個數為800。本文為每個待測查詢指定3個執行計劃,預測標簽為3維向量。因此,輸出層神經元個數為3。LSTM層激活函數選擇Softmax,FCN層激活函數選擇ReLu,輸出層激活函數選擇Sigmoid。為了防止過擬合,LSTM層后添加使Dropout,比率設為0.5。全連接層添加L2正則化,比率設為0.01。本文輸入特征向量較稀疏,優化器選擇Adam,初始學習率設為0.001。損失函數選擇交叉熵categorical_crossentropy,迭代1 000次。

表1 網絡參數信息Table 1 Information of network parameters
本實驗采用TPC-H標準[21]中的10 GB數據進行性能測試,實驗數據庫是PostgreSQL。操作系統為Windows Server2008、CentOS Linux release 7.4.1708(Core),硬件環境為Intel?Xeon?Bronze 3104 CPU@1.70 GHz RAM:64 GB,Intel Xeon CPU E5-2609 v4@1.70 GHz Mem:16 GB。編程語言采用Java、Python。實驗從多個角度驗證采用LSTM-FCN實現并發查詢執行計劃選擇的可行性。3.1節介紹數據集的獲取。3.2~3.4節從以下三個方面對LSTM-FCN模型進行評估:數據集大小對LSTM-FCN準確率的影響、LSTM-FCN輸入特征選擇的合理性、LSTM-FCN在不同并行度下(MPL分別為3、4、5、6、7)的穩定性。最后在3.5、3.6與3.7節中進行對比實驗,3.5節比較LSTM-FCN與FCN及LSTM的選擇準確率,3.6節中比較LSTM-FCN與查詢優化器及TRating方法為查詢選擇合適的執行計劃的準確率,3.7節中比較三種方法的耗時成本。
從TPC-H標準中抽取6個查詢模板:3,4,7,10,12,14,為這6個查詢模板指定相關參數,得到6個對應的查詢。實驗獲取這些查詢的執行計劃。PostgreSQL的pg_hint_plan插件可以通過指定表的連接順序、連接方式等方法,為查詢制定執行計劃。使用explain命令運行6個查詢,記錄查詢優化器為其生成的執行計劃。然后利用pg_hint_plan為每個查詢生成多個執行計劃。從這些執行計劃中選擇3個響應時間不同的執行計劃,作為實驗的執行計劃。
本實驗中用于生成數據集的查詢包括兩部分:待測試查詢、自定義查詢。從TPC-H標準中抽取6個查詢模板作為待測試查詢、相同標準下自定義73個查詢。這些查詢涵蓋了查詢所用的分組、排序、聚集、子查詢、連接等基本操作。對于其中的6個查詢模板,每個查詢指定3個執行計劃,共得到18個查詢。將這18個不同的查詢,與自定義的73個查詢自由組合。MPL=m(m=3,4,5,6,7)時,得到的樣本總數為:

實驗中,多次運行樣本,將各查詢的平均響應時間作為其真實響應時間。由于運行全部樣本需要巨大的時間成本,本實驗從全部樣本中隨機抽取一些樣本作為數據集來源。
數據庫并發執行每個樣本即自由組合得到的查詢組合,將查詢組合執行計劃按照2.3.1節中的方式編碼成.csv特征文件。PostgreSQL中共有34種操作類型,TPC-H標準中共有8張表,共61列。則向量a1共34位,a2共8位,a3共61位。統計發現,結果a4設為20位時,可以涵蓋實驗涉及到的查詢結果行寬度。那么一個執行計劃的一個操作對應的向量pj共有123位。經統計,本實驗中的查詢,最多有25個操作。一個執行計劃經過編碼后,轉換為3 075位的特征向量。多次運行待測試查詢,記錄其響應時間。運行樣本中待測查詢與自定義查詢的兩兩查詢組合,記錄響應時間。按照2.1節中,公式(1)的方法計算查詢組合交互值。統計發現,本實驗中的查詢組合交互值均小于50,按照2.3.2節中的方式將其編碼成.csv特征文件。
本實驗中,不同大小的數據集下,LSTM-FCN的選擇準確率變化如表2所列。數據集大小分別為:1 254個樣本、1 917個樣本、2 736個樣本、3 636個樣本,其中訓練集與測試集比例大約按照4∶1分配。

表2 不同數據集大小對LSTM-FCN準確率的影響Table 2 Influence of different data set sizes on accuracy of LSTM-FCN
分析表2得知,隨著學習樣本數增加,LSTM-FCN的選擇準確率保持一定幅度的上升。2 736個樣本作為數據集時,模型在同一并行度下的選擇準確率及不同并行度下的平均選擇準確率均高于前兩種大小的數據集。與2 736個樣本相比,3 636個樣本作為數據集時,平均準確率提升了0.36個百分點,但是訓練樣本的時間成本增加。因此,為了取得準確率與訓練成本的平衡,本實驗數據集大小選擇2 736個樣本。
本實驗分別將FoP、FQI與QMF作為輸入特征時,LSTM-FCN準確率變化情況如表3所列。

表3 不同輸入特征下LSTM-FCN的準確率Table 3 Accuracy of LSTM-FCN under different input characteristics
分析表3知,五種并行度下,將QMF作為輸入特征時,模型的預測準確率高于將FoP或FQI作為輸入特征時的準確率,證明本文選擇的輸入特征是合理的。
隨著并行度的增加,QMF與FoP分別作為輸入特征,LSTM-FCN的準確率分別相差0.157、0.185、0.201、0.209、0.222,差距逐漸增大。這是因為并行度增加,查詢交互對執行代價改變的程度增加,對執行計劃選擇的影響程度增加。QMF與FQI分別作為輸入特征,模型的準確率的差距變化基本穩定,說明查詢組合的執行計劃特征對選擇準確率的影響基本固定。FoP和FQI從靜態和動態兩個方面表征查詢的性能,同時將FoP和FQI的組合——QMF作為輸入特征,選擇執行計劃,具有合理性。
實驗中不同并行度下,LSTM-FCN的選擇準確率變化情況如表4所列。
分析表4得知,隨著并行度的增加,模型預測準確率出現小幅度的下降,分別下降了:0.006、0.009、0.006、0.004。因為并行度增加,模型中FCN的神經元個數相對固定,模型的表達能力相對固定。并行度增加,查詢交互更加復雜,LSTM-FCN的選擇準確率依然較高且保持相對穩定。

表4 不同并行度下LSTM-FCN的準確率Table 4 Accuracy of LSTM-FCN under different parallelism
相同網絡層數下,MPL=3、4、5、6、7時,FCN、LSTM與LSTM-FCN的準確率對比結果如表5所列。

表5 不同并行度下LSTM、FCN與LSTM-FCN的準確率Table 5 Accuracy of FCN,LSTM and LSTM-FCN under different parallelism
分析實驗結果可知,網絡層數、各層大小相同時,不同并行度下,LSTM-FCN選擇準確率高于FCN與LSTM的選擇準確率。其高于FCN的主要原因是:每個執行計劃的操作之間有時序關系,而FCN無法擬合這種時序關系。作為模型輸入層,LSTM層描述查詢各操作間的執行次序,動態選擇合適的執行計劃。LSTM-FCN的平均選擇準確率為97.06%,比FCN的平均選擇準確率高16.18個百分點。隨著并行度增加,LSTM-FCN在動態擬合查詢各操作間時序關系的優勢更加顯著。LSTMFCN選擇準確率高于LSTM的主要原因是:在LSTM層后添加一層FCN,可以充分融合特征,從而更好地描述查詢組合特征,提升模型的預測準確率。
相同的實驗場景下,分別在MPL=3、4、5、6、7時,對比LSTM-FCN與查詢優化器及TRating方法在為并發查詢選擇執行計劃時的準確率,結果如圖5所示。

圖5 LSTM-FCN、查詢優化器及TRating準確率比較Fig.5 Comparison of LSTM-FCN,query optimizer and TRating accuracy
同一并行度下,LSTM-FCN的選擇準確率高于優化器及TRating方法。LSTM-FCN平均選擇準確率相比查詢優化器與TRating分別提升了62.12個百分點、33.14個百分點。查詢優化器通過配置參數的方法考慮查詢交互,準確率較低。TRating只考慮查詢交互對執行計劃選擇的影響,準確率高于查詢優化器。但是,隨著并行度增加,查詢交互變得復雜,TRating線性模型難以準確擬合復雜的查詢交互帶來的查詢執行代價的改變,準確率出現較大幅度下降。LSTM-FCN同時考慮體現查詢執行代價的查詢組合執行計劃特征、體現查詢交互的查詢組合交互特征,為并發查詢動態選擇適合當前執行環境的執行計劃,準確率高于前兩種方法且保持相對穩定。
從模型平均耗時角度對比LSTM-FCN與查詢優化器及TRating性能的實驗結果如圖6所示。

圖6 LSTM-FCN、查詢優化器及TRating耗時比較Fig.6 Comparison of time cost among LSTM-FCN,query optimizer and TRating
分析圖6可知,LSTM-FCN所耗費的時間成本中位數低于查詢優化器,略高于TRating。這是因為,查詢優化器在選擇執行計劃時需要估算查詢每個操作的代價,并行度增加,優化器計算代價大幅度增加。TRating線性模型構建之后,隨著并行度增加,模型復雜度基本不變。與TRating相比,LSTM-FCN時間成本略高的原因是,并行度增加時,模型涉及到的參數數目增加。在OLAP場景下,與實時性相比,系統更加強調查詢執行計劃的選擇準確率,LSTM-FCN以較小的時間成本換取執行計劃選擇的高準確率和穩定性。此外,LSTM-FCN所耗費時間的上、下限值差距小于其余兩種方法,這也從側面反映了LSTM-FCN模型在不同并行度下的穩定性。
查詢是數據庫系統的主要負載,查詢執行的效率決定數據庫系統的性能。LSTM-FCN擬合查詢執行過程中各操作之間的時序關系,融合時域特征,實現分類。同時將分別表征查詢執行代價及查詢間相互作用的查詢組合執行計劃特征與查詢組合交互特征作為輸入,為并發執行的查詢動態選擇合適的執行計劃。實驗驗證了本文方法的合理性,查詢并行度增加,LSTM-FCN準確率較高且保持相對穩定。但是,LSTM-FCN也存在一定的局限性,由于運行所有樣本需要的時間成本較大,在以后的工作中,將考慮使用深度信念網絡生成更多的訓練數據。同時,在輸入特征完善方面,將數據庫系統運行過程中的相關參數作為輸入特征的一部分,期望取得更好的實驗效果。