資源描述:
《oracle sql性能調(diào)優(yōu)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、學(xué)習(xí)報(bào)告ORACLESQL性能調(diào)優(yōu)1序言22影響SQLPERFORMANCE的關(guān)鍵因素和配置:22.1關(guān)于執(zhí)行計(jì)劃22.2ORACLE優(yōu)化器22.2.1ORACLE優(yōu)化器的優(yōu)化方式22.2.2優(yōu)化器的優(yōu)化模式(OptermizerMode)32.2.3Optimizermode優(yōu)化模式級(jí)別的設(shè)定:32.2.4查看對(duì)象統(tǒng)計(jì)信息(objectstatistics)32.3結(jié)合BenQOracleERP42.3.1優(yōu)化模式(OptermizerMode)42.3.2關(guān)于Gather52.4跟蹤SQL實(shí)際運(yùn)行的Cost52.5小結(jié)53SQL語(yǔ)句的TUNING經(jīng)驗(yàn)分享:6
2、3.1絕大多數(shù)情況下notexists比notin效率高63.2UNIONALL效率比UNION高很多63.3一些很耗資源的SQL操作,在不必要的情況下不要使用63.4通常聯(lián)接查詢比子查詢的效率要高很多73.5用table索引(index)欄位去做Table間的關(guān)聯(lián),可避免費(fèi)時(shí)的全表掃描73.6在View中盡量不要使用Package/function來(lái)得到欄位值,83.7通過(guò)ROWID訪問(wèn)表93.8必要時(shí),可在OracleStandardTable上加索引93.9合理排列WHERE子句中的連接順序.93.10用Where子句替換HAVING子句93.11關(guān)于使用
3、索引(Index)的一些注意點(diǎn)103.11.1‘!=’,NOT操作將不使用索引.103.11.2‘
4、
5、’是字符連接函數(shù).就象其它函數(shù)那樣,停用了索引.103.11.3相同的索引列不能互相比較,這將會(huì)啟用全表掃描.103.11.4避免在索引列上使用計(jì)算.113.11.5基于成本的優(yōu)化器(CBO)會(huì)對(duì)索引的選擇性進(jìn)行判斷,來(lái)決定是否使用索引113.11.6Index信息的重新統(tǒng)計(jì)113.12識(shí)別“低效運(yùn)行”的SQL語(yǔ)句11學(xué)習(xí)報(bào)告1序言BenQSaleOffice自O(shè)racleERP上線后,隨著資料量的日益加大,目前BQE,BQC,BQP這幾個(gè)Site的Perfor
6、mance的問(wèn)題都表現(xiàn)得越來(lái)越明顯,Tunning得工作量也明顯增加??紤]到影響OracleSQLPerformance的有很多方面,我們這次研究的Tunning先包括兩個(gè)大方向:OracleDBConfiguration和SQLStatementTuning。這份文檔主要將影響SQLPerformance的因素做個(gè)基礎(chǔ)的闡述,再將大家在平時(shí)寫SQL積累的經(jīng)驗(yàn)做個(gè)總結(jié)。2影響SQLPerformance的關(guān)鍵因素和配置:OracleDatabase上的設(shè)置對(duì)Performance的影響很大,如SharedPoolSize、BufferCacheSize、SGAS
7、tructures、DatabaseI/OConfiguration、RollbackSegments等等,這些是DBA要更據(jù)實(shí)際狀況取Tunning的部分,我們暫不詳細(xì)討論,DBA可對(duì)這塊進(jìn)行補(bǔ)充;這份文檔我們將重點(diǎn)放在影響SQL執(zhí)行效率的一些關(guān)鍵因素和設(shè)置上。2.1關(guān)于執(zhí)行計(jì)劃我們?cè)谄綍r(shí)工作中用到大量的View,View中SQL的寫法對(duì)效率的影響很大,首先有必要了解一條SQL語(yǔ)句是如何被執(zhí)行的。當(dāng)SQL語(yǔ)句進(jìn)入Oracle的緩存后,在該語(yǔ)句準(zhǔn)備執(zhí)行之前,DBMS將執(zhí)行下列步驟:1.SQL語(yǔ)法檢查:檢查SQL語(yǔ)句拼寫是否正確和詞序。2.SQL語(yǔ)義分析:核實(shí)所有
8、的與數(shù)據(jù)字典不一致的表和列的名字。3.生成執(zhí)行計(jì)劃:使用優(yōu)化規(guī)則和數(shù)據(jù)字典中的統(tǒng)計(jì)表來(lái)決定最佳執(zhí)行計(jì)劃。4.建立可執(zhí)行的二進(jìn)制代碼:基于執(zhí)行計(jì)劃,Oracle生成二進(jìn)制執(zhí)行代碼。5.抓取并返回需要的數(shù)據(jù)。其中第三步生成執(zhí)行計(jì)劃非常關(guān)鍵,所謂執(zhí)行計(jì)劃,就是對(duì)一個(gè)查詢?nèi)蝿?wù),做出一份怎樣去完成任務(wù)的詳細(xì)方案。對(duì)于查詢而言,我們提交的SQL僅僅是描述出了我們的目的,但Oracle內(nèi)部怎么去得到這些數(shù)據(jù),是由數(shù)據(jù)庫(kù)DBMS來(lái)決定的。所以執(zhí)行計(jì)劃產(chǎn)生的好壞直接影響SQL運(yùn)行的Performance。我們平時(shí)對(duì)SQL做一些Tuning,為了得到相同的數(shù)據(jù)而去嘗試用不同的SQL
9、寫法,目的就是能讓Oracle更據(jù)你的語(yǔ)句產(chǎn)生一個(gè)更好的執(zhí)行計(jì)劃,從而得到更好的效率。2.2ORACLE優(yōu)化器在不同的情況下,同一條SQL可能有多種執(zhí)行計(jì)劃。但理論上在某一時(shí)點(diǎn),一定只有一種執(zhí)行計(jì)劃是最優(yōu)的、花費(fèi)時(shí)間是最少的。執(zhí)行計(jì)劃的工作是由優(yōu)化器(Optimizer)來(lái)完成的,那優(yōu)化器是依據(jù)什么訊息去創(chuàng)建出最合理的執(zhí)行計(jì)劃?回答這個(gè)問(wèn)題前先要了解一下ORACLE的優(yōu)化器:2.2.1ORACLE優(yōu)化器的優(yōu)化方式ORACLE優(yōu)化器的優(yōu)化方式有兩大類,即基于規(guī)則的優(yōu)化方式(Rule-BasedOptimization,簡(jiǎn)稱為RBO)和基于代價(jià)的優(yōu)化方式(Cost-
10、BasedOptimiz