2
3
4
5
6
7
8
9
10
Oracle SQL運行時間的最主要的組成部分是花在為執(zhí)行準(zhǔn)備新的SQL語句上的時間。不過,如果了解了可執(zhí)行計劃產(chǎn)生的內(nèi)在機制,你就可以控制Oracle花費在評估表的連接順序的時間,并在總體上提高查詢的性能。
準(zhǔn)備為執(zhí)行提供的SQL語句
在一個SQL語句進(jìn)入Oracle庫的cache之后、而真正被執(zhí)行之前,將會依次發(fā)生如下事件:
語法檢查——檢查該SQL語句的拼寫和詞序是否正確。
語義解析——Oracle根據(jù)數(shù)據(jù)詞典(data dictionary)來驗證所有的表格(table)和列(column)。
已保存綱要檢查——Oracle檢查詞典以確認(rèn)對應(yīng)該SQL語句是否已存在已保存的綱要(Stored Outline)。
產(chǎn)生執(zhí)行計劃——Oracle根據(jù)一種罰值(cost-based)優(yōu)化算法和數(shù)據(jù)詞典中的統(tǒng)計數(shù)據(jù)來決定如何生成最優(yōu)執(zhí)行計劃。
產(chǎn)生二進(jìn)制代碼——Oracle在執(zhí)行計劃的基礎(chǔ)上生成可執(zhí)行的二進(jìn)制代碼。
一旦開始準(zhǔn)備執(zhí)行SQL語句,上述的過程很快就會執(zhí)行,這是因為Oracle可以識別出同樣的SQL語句并對同樣的SQL語句重復(fù)使用對應(yīng)的可執(zhí)行代碼。然而,對產(chǎn)生ad hoc SQL的系統(tǒng)以及SQL中嵌入文本值(literal value)的情況,SQL執(zhí)行計劃的生成時間就會變得相當(dāng)長,而且以前的執(zhí)行計劃也常常不能被再次利用。對那些牽涉到許多表格的查詢,Oracle可能要花上很長的時間來決定把連接這些表格的順序。
評估連接表格的順序
生成可執(zhí)行計劃的時間往往是SQL的準(zhǔn)備過程中最大的開銷組成部分,尤其是在處理有多個表的連接的查詢的情況下。當(dāng)Oracle評估表的連接順序時,它必須考慮每一種可能的排序。例如,當(dāng)有六個表格需要連接時,Oracle需要考慮720種(6的排列數(shù),即6×5×4×3×2×1=720)可能的連接排序。當(dāng)需要連接的表的數(shù)量超過10時,這個排列問題將變得非常突出:如果需要連接的表格有15個,那么需要考慮的可能的查詢排列順序超過一萬億種(精確值為1,307,674,368,000)。
在optimizer_search_limit參數(shù)中設(shè)置限制
你可以通過optimizer_search_limit參數(shù)來控制上述問題的發(fā)生,該參數(shù)用來指定優(yōu)化器評估的表格連接順序的最大數(shù)目。利用這個參數(shù),就可以防止優(yōu)化器在評估所有可能的表格連接順序中所花費的多余時間。如果查詢中的表的數(shù)量少于或者等于optimizer_search_limit,那么優(yōu)化器檢查所有的可能表的連接方式。
例如,涉及了五個表的查詢一共有120種(5!=5×4×3×2×1=120)可能的連接順序,所以如果參數(shù)optimizer_search_limit的值設(shè)置為5(默認(rèn)值),那么優(yōu)化器就會考慮所有的這120種可能的連接順序。optimizer_search_limit參數(shù)還用來控制啟動開始連接指示(star join hint)的閾值。當(dāng)查詢所涉及的表格數(shù)量少于參數(shù)optimizer_search_limit的設(shè)定值,開始連接指示將被設(shè)置。
另一個工具:optimizer_max_permutations參數(shù)
optimizer_max_permutations初始參數(shù)用來設(shè)定優(yōu)化器優(yōu)化范圍的上界(即最多考慮多少種表格連接順序),它依賴于初始參數(shù) optimizer_search_limit。參數(shù)optimizer_max_permutations的默認(rèn)值為8000。
參數(shù)optimizer_search_limit 和optimizer_max_permutations一同用來設(shè)置優(yōu)化器所考慮的排列數(shù)的上限。優(yōu)化器不斷的產(chǎn)生可能的表的連接的排列,直到排列數(shù)達(dá)到參數(shù)optimizer_search_limit或者optimizer_max_permutations為止。一旦優(yōu)化器停止產(chǎn)生新的可能連接排列,它將會從中選擇出耗費最小的排列。
更多軟考資料請訪問:考試吧軟件水平考試欄目
希望與更多網(wǎng)友交流,請進(jìn)入考試吧軟件水平考試論壇
轉(zhuǎn)帖于:軟件水平考試_考試吧
- 推薦給朋友
- 收藏此頁
·教你調(diào)整Oracle數(shù)據(jù)庫服務(wù)器的性能 (2007-1-25 16:15:36)
·SQL SERVER優(yōu)化建議 (2007-1-25 16:13:03)
·Oracle SQL語句優(yōu)化技術(shù)分析 (2007-1-25 16:09:20)
·Excel數(shù)據(jù)透視表使用方法精要12點(中文對照) (2007-1-25 16:06:31)
·Oracle數(shù)據(jù)庫性能優(yōu)化技術(shù) (2007-1-25 16:00:58)
如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系,我們將會及時處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請注明出處。