近日,上海交通大學(xué)軟件學(xué)院副院長(zhǎng)王肇國(guó)和高斯實(shí)驗(yàn)室GaussDB數(shù)據(jù)庫優(yōu)化器專家Ethan聯(lián)手開展了一場(chǎng)以《智能優(yōu)化揭秘——GaussDB數(shù)據(jù)庫查詢重寫的自動(dòng)挖掘與生成》為主題的技術(shù)對(duì)談,深入探討了WeTune 2.0的重寫規(guī)則與GaussDB的合作落地。直播過程包含對(duì)WeTune 2.0的項(xiàng)目背景、WeTune改寫規(guī)則的自動(dòng)發(fā)掘方式及實(shí)現(xiàn)、WeTune 2.0版本優(yōu)勢(shì)、在GaussDB中的應(yīng)用與技術(shù)轉(zhuǎn)化、未來前景等內(nèi)容的解析與分享,一起傾聽他們產(chǎn)教融合背后的故事吧。以下是本訪談的文字記錄。
WeTune產(chǎn)品的項(xiàng)目背景
查詢改寫是數(shù)據(jù)庫SQL優(yōu)化過程中非常重要的部分,在語義不變的情況下,它可以把一條普通的或者性能不好的SQL語句優(yōu)化成一條性能更好的SQL語句,實(shí)現(xiàn)查詢效率的提升。改寫規(guī)則作為查詢改寫中最關(guān)鍵的一個(gè)組件,想要在數(shù)據(jù)庫里面添加改寫規(guī)則,往往依賴于數(shù)據(jù)庫專家經(jīng)驗(yàn)的積累。如今,SQL語句的生成對(duì)象不再受限于程序員,外部框架和大模型也能夠自動(dòng)生成,隨著生成源的增加,原來的SQL改寫規(guī)則不再適用。
由上海交通大學(xué)軟件學(xué)院副院長(zhǎng)王肇國(guó)團(tuán)隊(duì)開發(fā)出的WeTune剛好能解決這一問題,其核心思想就是自動(dòng)發(fā)掘某些場(chǎng)景下的改寫規(guī)則。于是,華為云數(shù)據(jù)庫GaussDB團(tuán)隊(duì)與王肇國(guó)教授團(tuán)隊(duì)深度合作,成功完成WeTune 2.0在GaussDB產(chǎn)品上的落地。
WeTune改寫規(guī)則的自動(dòng)發(fā)掘方式
自動(dòng)挖掘的前提是暴力枚舉,枚舉之后檢驗(yàn)語義是否正確,通過等價(jià)性驗(yàn)證去把最后一道關(guān),所以,WeTune的等價(jià)性驗(yàn)證能力決定了它能夠枚舉哪些規(guī)則。下面是WeTune的改寫規(guī)則的自動(dòng)發(fā)掘方式:
方式一,嘗試暴力枚舉所有在語法上合法的改寫規(guī)則;
方式二,用形式化驗(yàn)證的方式去驗(yàn)證枚舉的規(guī)則是否正確(輸入、輸出的SQL是否在語義上等價(jià));
方式三,借鑒數(shù)據(jù)庫cost estimation技術(shù)檢驗(yàn)改寫規(guī)則是否有效,SQL優(yōu)化性能是否更好。
在實(shí)際運(yùn)用中,以上改寫規(guī)則的三種自動(dòng)發(fā)掘方式也面臨著一些現(xiàn)實(shí)層面的挑戰(zhàn)。
暴力枚舉雖然空間大,但開銷也大,導(dǎo)致很多算力浪費(fèi)。不過,上海交通大學(xué)軟件學(xué)院副院長(zhǎng)王肇國(guó)團(tuán)隊(duì)通過開發(fā)的一種只枚舉小規(guī)則的技術(shù),用小規(guī)則去推大規(guī)則,解決算力浪費(fèi)的問題。
等價(jià)性驗(yàn)證。改寫規(guī)則等價(jià)性驗(yàn)證,本質(zhì)上就是SQL等價(jià)性驗(yàn)證,把不可判定問題的驗(yàn)證轉(zhuǎn)換成可滿足性等價(jià)、可判定問題的驗(yàn)證。另外,SQL等價(jià)性本身是一個(gè)關(guān)系型代數(shù),把它轉(zhuǎn)換成線性代數(shù)的求解。通過這兩個(gè)維度解決了現(xiàn)有的SQL等價(jià)性驗(yàn)證問題,使得改寫規(guī)則的枚舉能力和范圍大大提升。目前WeTune 2.0支持SQL:1999所有語法的驗(yàn)證。
除了借鑒數(shù)據(jù)庫cost estimation技術(shù)來檢驗(yàn)SQL優(yōu)化性能是否更好以外,還會(huì)創(chuàng)建數(shù)據(jù)庫實(shí)例,將改寫規(guī)則在數(shù)據(jù)庫實(shí)例上運(yùn)行,以保證SQL優(yōu)化效果最佳。
有了這三方面的解決方案之后,2022年,上海交通大學(xué)軟件學(xué)院副院長(zhǎng)王肇國(guó)團(tuán)隊(duì)對(duì)WeTune 1.0版本進(jìn)行了一個(gè)性能測(cè)試。他們從GitHub上通過對(duì)起始時(shí)間、受歡迎程度等維度進(jìn)行篩選排序,找了涵蓋電商、論壇等不同應(yīng)用場(chǎng)景的20個(gè)開源應(yīng)用,并在這些應(yīng)用上運(yùn)行程序,共收集了大概8500多條SQL語句。結(jié)果顯示,WeTune 1.0優(yōu)化的SQL語句大概674條,而其他商業(yè)數(shù)據(jù)庫只能優(yōu)化427條。相較而言,WeTune 1.0 優(yōu)化效果大幅領(lǐng)先。
WeTune改寫規(guī)則的自動(dòng)挖掘?qū)崿F(xiàn)
WeTune 2.0在SQL等價(jià)性驗(yàn)證、枚舉的能力和范圍、規(guī)則的表達(dá)上都進(jìn)行了精心設(shè)計(jì),對(duì)GaussDB使用體驗(yàn)有極大提升。
第一,WeTune有驗(yàn)證規(guī)則的能力。對(duì)于開發(fā)流程來講,驗(yàn)證規(guī)則是很重要的一步。
第二,WeTune有自動(dòng)發(fā)現(xiàn)規(guī)則的能力。重寫規(guī)則依賴人工、偏場(chǎng)景化會(huì)導(dǎo)致發(fā)現(xiàn)規(guī)則比較緩慢。WeTune可以幫助做優(yōu)化,提高發(fā)現(xiàn)規(guī)則的效率。
第三,WeTune有自動(dòng)枚舉的能力。等價(jià)驗(yàn)證加上自動(dòng)枚舉,自動(dòng)挖掘一次能夠發(fā)現(xiàn)成千上萬條規(guī)則,相當(dāng)于把查詢重寫整個(gè)模塊開發(fā)流程做了一個(gè)加速。對(duì)于一個(gè)商業(yè)的數(shù)據(jù)庫來講, WeTune自動(dòng)挖掘可以減少開發(fā)人員冗余的規(guī)則添加,提高開發(fā)效率,降低人力成本。
第四,WeTune定義新的查詢重寫語言。WeTune應(yīng)用在GaussDB數(shù)據(jù)庫里,進(jìn)行查詢重寫規(guī)則擴(kuò)充的時(shí)候,其實(shí)定義了一種新的查詢重寫的語言。以前要寫很多行的代碼,才能給一套規(guī)則注入到引擎里面?,F(xiàn)在不用寫代碼,只需要兩三行的語言描述,通過規(guī)則驗(yàn)證后,直接放在數(shù)據(jù)庫引擎里面,完成一個(gè)規(guī)則的實(shí)現(xiàn)。對(duì)開發(fā)者來說,體驗(yàn)非常好,對(duì)驗(yàn)證流程和開發(fā)流程幫助極大。
WeTune 2.0版本優(yōu)勢(shì)
相比WeTune 1.0版本,WeTune 2.0版本有幾個(gè)比較大的優(yōu)勢(shì):
第一,增強(qiáng)的WeTune枚舉能力,包括枚舉的速度和枚舉更多的復(fù)雜規(guī)則;
第二,增強(qiáng)的WeTune驗(yàn)證能力,可以支持更多的SQL特性;
第三,可以讓用戶可讀、可加載、甚至可以直接使用手寫。
對(duì)比現(xiàn)有基于代碼的查詢引擎,WeTune 2.0不需要代碼、不需要編譯、不需要去發(fā)布版本,客戶自己可以寫改寫規(guī)則,寫完之后,通過GaussDB提早準(zhǔn)備的接口,直接放到數(shù)據(jù)庫里面就可以即時(shí)生效。GaussDB可以為用戶提前預(yù)留好很多重寫規(guī)則,后續(xù)如發(fā)現(xiàn)重寫規(guī)則不夠用,可自行增加,非常方便。
第四,改寫規(guī)則可在客戶端實(shí)現(xiàn)部署。WeTune目前主要部署在云端,后面改寫規(guī)則也可以部署在客戶端,進(jìn)行自動(dòng)加載,實(shí)現(xiàn)不同用戶間互不干擾。
WeTune 2.0在華為云GaussDB的落地
WeTune和現(xiàn)有數(shù)據(jù)庫應(yīng)用落地過程中,不同的架構(gòu)會(huì)面臨不同挑戰(zhàn)。WeTune 2.0在華為云GaussDB的落地,從技術(shù)角度來講,GaussDB數(shù)據(jù)庫是System-R架構(gòu),它的重寫規(guī)則是耦合在代碼里面,增加或卸載一個(gè)規(guī)則需要改寫查詢引擎。把WeTune應(yīng)用在System-R架構(gòu)上面涉及到理論、技術(shù)、工程層面的一些問題。
不過,上海交通大學(xué)和華為的積極交流和深入探討,也為彼此提供了不同的視角。
在數(shù)據(jù)庫開發(fā)過程中,改寫規(guī)則非常依賴人工經(jīng)驗(yàn)。隨著客戶場(chǎng)景越來越多,很多規(guī)則已經(jīng)超出了現(xiàn)有的承載能力。從產(chǎn)品開發(fā)流程層面上講,想要在GaussDB里面添加一個(gè)新的重寫規(guī)則,論證重寫規(guī)則是否等價(jià)是非常困難的。但是有了WeTune以后,開發(fā)者只要按照形式化語言去描述重寫規(guī)則,然后WeTune拿去做驗(yàn)證,證明該規(guī)則在約束下是等價(jià)的,就可以放心地將該重寫規(guī)則添加到GaussDB中,節(jié)約驗(yàn)證時(shí)間,對(duì)GaussDB的開發(fā)等流程非常有幫助。
WeTune從框架上去解決了這兩個(gè)重寫規(guī)則是否等價(jià)的問題,這是WeTune非常突出的貢獻(xiàn)點(diǎn)。對(duì)于客戶來說,在使用GaussDB進(jìn)行SQL優(yōu)化時(shí),只管放心用,優(yōu)化交給GaussDB;對(duì)于開發(fā)者來說,只需要關(guān)心SQL語義,性能交給GaussDB。
GaussDB引入WeTune2.0以后,自然會(huì)產(chǎn)生非常多的規(guī)則,幫助用戶優(yōu)化SQL的同時(shí),也引入了另外一個(gè)成本,即會(huì)產(chǎn)生了SQL優(yōu)化代價(jià)。
如何解決引入大量規(guī)則之后,產(chǎn)生的性能問題?
從客戶角度來講,很多業(yè)務(wù)其實(shí)是相對(duì)比較固定的,而且上線之前也提前會(huì)做系統(tǒng)測(cè)試。若系統(tǒng)里面SQL優(yōu)化度很高,那么就不必改寫規(guī)則和暴力枚舉,這樣就可以降低優(yōu)化成本。
在實(shí)際環(huán)境中,大家希望數(shù)據(jù)庫有成千上萬條的改寫規(guī)則可以給用戶去用,可以生成改寫的SQL語句。但是,改寫規(guī)則非常多的時(shí)候,會(huì)導(dǎo)致改寫和規(guī)則匹配的時(shí)間非常長(zhǎng),導(dǎo)致資源的極大浪費(fèi),也會(huì)影響用戶體驗(yàn)。那如何在性能上做加速呢?
目前來講,主要通過兩方面來去解決:
一方面是從通用的匹配算法入手。當(dāng)改寫規(guī)則非常多的時(shí)候,匹配算法能夠幫助性能有數(shù)量級(jí)的提升;
另一方面,從應(yīng)用的場(chǎng)景或從SQL產(chǎn)生的源頭來進(jìn)行分類。不同應(yīng)用場(chǎng)景下、不同業(yè)務(wù)目的、不同的框架需要的改寫規(guī)則不一樣,WeTune 2.0可以對(duì)于不同場(chǎng)景和需求來去做定制化的規(guī)則探索。
WeTune在數(shù)據(jù)庫產(chǎn)業(yè)的價(jià)值及未來前景
WeTune是多個(gè)技術(shù)合起來形成了一個(gè)規(guī)則挖掘。從學(xué)術(shù)角度來講,SQL等價(jià)性驗(yàn)證可以往數(shù)據(jù)庫測(cè)試這個(gè)方向再邁一步。
在數(shù)據(jù)庫測(cè)試過程中,對(duì)于SQL的優(yōu)化引擎,可以使用差分測(cè)試。差分測(cè)試是一種很經(jīng)典的數(shù)據(jù)庫測(cè)試方式,驗(yàn)證重寫規(guī)則可以使用,驗(yàn)證SQL優(yōu)化引擎過程中也適用。WeTune等價(jià)性驗(yàn)證器可以去枚舉語義等價(jià)但形式完全不同的兩條SQL,這樣可以確保在測(cè)試對(duì)比過程中,程序運(yùn)行是不一樣的路徑,可以更高效或覆蓋面更廣地完成數(shù)據(jù)庫引擎的測(cè)試任務(wù)。
WeTune不僅減輕了數(shù)據(jù)庫開發(fā)者或者DBA的負(fù)擔(dān),目前在教育領(lǐng)域里有一定的應(yīng)用,WeTune等價(jià)性驗(yàn)證幫助國(guó)內(nèi)外很多高校助教批改學(xué)生的數(shù)據(jù)庫作業(yè),減輕數(shù)據(jù)庫教育工作者的工作壓力。
華為與高校的深度合作將持續(xù)推進(jìn),融合雙方的技術(shù)優(yōu)勢(shì)和科研力量,共同探索數(shù)據(jù)庫領(lǐng)域的前沿技術(shù),培養(yǎng)更多高水平的數(shù)據(jù)庫人才。未來,華為和上海交通大學(xué)研究團(tuán)隊(duì)將攜手,共同突破數(shù)據(jù)庫查詢重寫技術(shù)的瓶頸,通過持續(xù)的創(chuàng)新和優(yōu)化,進(jìn)一步提升GaussDB的查詢性能和效率。我們期待更多的技術(shù)合作和探索,推動(dòng)數(shù)據(jù)庫技術(shù)向智能化、自動(dòng)化方向發(fā)展,為廣大企業(yè)和用戶帶來更多價(jià)值。
關(guān)注#華為云開發(fā)者聯(lián)盟# 點(diǎn)擊下方,第一時(shí)間了解華為云新鮮技術(shù)~
華為云博客_大數(shù)據(jù)博客_AI博客_云計(jì)算博客_開發(fā)者中心-華為云
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。