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