|
導(dǎo)讀數(shù)據(jù)庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數(shù)據(jù)進(jìn)行新增、截取、更新、刪除等操作。所謂“數(shù)據(jù)庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應(yīng)... 數(shù)據(jù)庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數(shù)據(jù)進(jìn)行新增、截取、更新、刪除等操作。所謂“數(shù)據(jù)庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應(yīng)用程序彼此獨立的數(shù)據(jù)集合。 多年以來,商業(yè)數(shù)據(jù)庫生產(chǎn)商一直致力于提高數(shù)據(jù)庫的查詢性能。盡管他們持續(xù)地付出努力和辛勤地工作,我們還是無法看到關(guān)系型數(shù)據(jù)庫系統(tǒng)(rdbms)在性能上有顯著的提高。用戶繼續(xù)忍受性能低下的sql語句,數(shù)據(jù)庫專家們繼續(xù)在sql語句優(yōu)化的泥潭中痛苦掙扎。 本文將介紹數(shù)據(jù)庫查詢優(yōu)化器是如何工作的、為什么問題持續(xù)存在,并深入探討數(shù)據(jù)庫查詢優(yōu)化器將來的發(fā)展方向。 數(shù)據(jù)庫查詢優(yōu)化器 數(shù)據(jù)庫查詢優(yōu)化器是rdbms服務(wù)器的一個組成部分。對于基于成本的優(yōu)化,數(shù)據(jù)庫查詢優(yōu)化器的任務(wù)是,通過產(chǎn)生可供選擇的執(zhí)行計劃,找到最低估算成本的執(zhí)行計劃,來優(yōu)化一條sql語句。它在sql語句性能表現(xiàn)上扮演了至關(guān)重要的角色。 當(dāng)一條sql語句被送入rdbms服務(wù)器,它將會被解析并提交給數(shù)據(jù)庫查詢優(yōu)化器。查詢優(yōu)化器將會進(jìn)行查詢重寫和表達(dá)式評估,以產(chǎn)生可供選擇的執(zhí)行計劃。產(chǎn)生可供選擇的執(zhí)行計劃的數(shù)量,取決于在rdbms中定義的計劃空間(plan space)大小。對于每個待選的執(zhí)行計劃,成本估計將被計算,帶有最小成本的執(zhí)行計劃將被選取用來執(zhí)行sql語句。這種方法存在著兩個無法解決的問題:無法產(chǎn)生全部可能的可選執(zhí)行計劃和成本估計的不準(zhǔn)確。 新的sql優(yōu)化概念——外部sql重寫器 一個有經(jīng)驗的程序員,把有問題的sql語句的速度提高數(shù)千倍是很常見的。憑著對具體數(shù)據(jù)庫特征的了解,對sql語句進(jìn)行語法的重新構(gòu)造。一個開發(fā)人員能夠幫助查詢優(yōu)化器獲得更好的執(zhí)行計劃,而這執(zhí)行計劃是查詢優(yōu)化器無法靠自身獨立工作產(chǎn)生的。這給予我們一個啟示,我們是否能通過計算機(jī)模擬人的行為,來實現(xiàn)同樣的目的呢? 顯示了外部sql重寫器(external sql rewriter--esr)的概念,它能夠基于現(xiàn)有數(shù)據(jù)庫的特性,產(chǎn)生語義相等但語法不同的sql語句。重寫產(chǎn)生的sql語句,將取代程序源代碼中的源sql語句。這樣,當(dāng)程序運行時(使用新的sql語句),查詢優(yōu)化器將會被影響,而產(chǎn)生性能更好的執(zhí)行計劃。事實上,有經(jīng)驗的程序員和數(shù)據(jù)庫管理員,一直在期盼著這個概念的出現(xiàn)。這個概念的新穎之處在于,將人類的知識和智能合并到一個計算機(jī)算法中,它能夠打破計劃空間(plan space)限制的障礙,避免在尋找最佳sql語句時不準(zhǔn)確的成本估算。 esr的優(yōu)點是,它的優(yōu)化并非一個基于實時,可用于重寫和優(yōu)化sql語句的時間,在理論上是無限的。它可以比數(shù)據(jù)庫的查詢優(yōu)化器嘗試更多的待選sql語句。用戶花費多達(dá)一天的時間來處理關(guān)鍵sql語句的性能問題,而esr可以徹底尋找可能的待選執(zhí)行計劃。esr的另外一個優(yōu)點是,能夠達(dá)到sql性能提高的目的,而無需進(jìn)行額外的統(tǒng)計,使數(shù)據(jù)庫查詢優(yōu)化器的負(fù)載過重。因此,esr使得提升整個數(shù)據(jù)庫性能變得簡單且安全。最后,esr相對于數(shù)據(jù)庫內(nèi)部的查詢優(yōu)化器更加靈活:sql重寫的知識庫可以很容易擴(kuò)展,搜索空間可以通過硬件的升級來擴(kuò)展,而毫無限制和缺點。 esr是如何工作的? 為了讓esr能夠優(yōu)化sql語句,必須避免數(shù)據(jù)庫內(nèi)部查詢優(yōu)化器限制所產(chǎn)生的障礙。另外,esr必須擁有重寫sql語句的智能,并知道你數(shù)據(jù)庫的特性,來提供待選的sql語句。盡管達(dá)到上面的要求是困難的,但是開發(fā)一個這樣的算法也不是不可能的。國內(nèi)市場上已經(jīng)由盈動華建公司代理推出了一個相當(dāng)成熟的產(chǎn)品——lecco technology 的lecco sql expert。 sql語句可以被直接輸入,或通過檢查源代碼來捕獲有問題的sql語句。當(dāng)esr收到sql語句,一個遞歸的轉(zhuǎn)換算法被應(yīng)用來重寫源sql語句,產(chǎn)生每一個可能的語義等價的待選sql語句。遞歸的sql轉(zhuǎn)換引擎,擁有內(nèi)建的人工智能和sql轉(zhuǎn)換規(guī)則,它依照具體數(shù)據(jù)庫的特性來重新構(gòu)造sql語句。 可擴(kuò)展的計劃空間 用戶可自定義的限額讓用戶能夠控制搜索空間。如果用戶對在定義的限額內(nèi)產(chǎn)生的結(jié)果不滿意,或無法找到性能更好的待選sql語句,用戶可以提高限額來增加搜索空間,直到更多的待選sql語句被找到。因此,esr的計劃空間的擴(kuò)展,要比數(shù)據(jù)庫查詢優(yōu)化器有彈性得多。另一個考慮周到的特性是,esr可以在內(nèi)部把具有重復(fù)執(zhí)行計劃的sql語句給排除掉。這樣不僅減少了人工反復(fù)嘗試的成本,還保證了重寫產(chǎn)生的每條sql語句,都具有不同的執(zhí)行計劃和性能。 盡管esr能夠擴(kuò)大它的計劃空間和產(chǎn)生更多的待選sql語句,它還是和數(shù)據(jù)庫內(nèi)部查詢優(yōu)化器一樣,面對著不準(zhǔn)確的成本估算的問題。沒有實際地執(zhí)行過每一條重寫后的sql語句,是根本無法知道,在所有待選sql語句中到底哪一條的性能最好。因此,實際的途徑是,測試運行所有的待選sql語句。圖2中的esr例子使用了這一方法并附加提供了測試選項來找到性能最好的sql語句。用戶可以選擇,什么時候來開始測試和允許進(jìn)行多長時間的測試。此外,esr的重要性還在于,整個優(yōu)化過程不需要使用者具有數(shù)據(jù)庫專家的經(jīng)驗。正如我們所知道的,不同的sql語法可以引起數(shù)據(jù)庫查詢優(yōu)化器產(chǎn)生不同的執(zhí)行計劃,因此esr也必須具有模擬人工重寫sql語句的能力。遞歸式sql語法轉(zhuǎn)換技術(shù),正是用來模擬人的sql轉(zhuǎn)換方法。它合并一系列有用的轉(zhuǎn)換規(guī)則,并使用一次觸發(fā)一條的方法來轉(zhuǎn)換sql語句。所有的轉(zhuǎn)換規(guī)則是不互相依賴的,就像一個個密封的小門,只有在所有必需的條件都滿足的情況下,某個密封門才會被打開。這保證了重寫后的sql語句與原sql語句在語義上是等效的。 esr技術(shù)的展望 隨著硬件的升級,esr能夠合并更多的sql轉(zhuǎn)換規(guī)則,來處理數(shù)據(jù)庫的新特性和更復(fù)雜的sql語句,理論上,規(guī)則的數(shù)量是沒有限制的。將來,隨著數(shù)據(jù)庫生產(chǎn)商在讓用戶影響數(shù)據(jù)庫優(yōu)化器方面更加開放,esr將會在優(yōu)化策略方面得到更多的控制。毫無疑問,esr將會在分擔(dān)數(shù)據(jù)庫查詢優(yōu)化器的工作負(fù)荷上,扮演越來越重要的角色。 全新的路由器不僅讓你更穩(wěn)定快速地連接無線網(wǎng)絡(luò),更可以讓家中的智能設(shè)備連接在一起。 |
溫馨提示:喜歡本站的話,請收藏一下本站!