Oracle的優(yōu)化原理
2024-08-29 13:39:25
供稿:網友
前面講了Oracle性能調優(yōu)原則,但是可能有許多朋友不知道ORACLE優(yōu)化機理到底是什么?下面作一簡單說明。 解釋 先說明一下,ORACLE有一個優(yōu)化器(Optimizer),ORACLE的優(yōu)化機理就是從Optimizer開始的。 明確兩個概念:Optimizer 對ORACLE的優(yōu)化方式有兩種,一種是基于規(guī)則的,我們稱為RBO(Rule-Based Optimization),一種是基于代價的CBO(Cost-Based Optimization),我們從字面就可基本理解這兩個優(yōu)化方式的含義,不錯,RBO是根據ORACLE的內定規(guī)則實現的,比如我在“ORACLE性能調優(yōu)原則”中講到的:索引,索引就是ORACLE的內定規(guī)則;而對于CBO,由于是基于代價的,也就是ORACLE機器的資源了,比如CPU和內存等,這個時候有朋友就問了,既然有這兩個方式,那ORACLE到底如何選擇呢,其實,這個問題有一半需要我們自己回答,有一半由ORACLE回答。因為我們在安裝ORACLE時就已決定了ORACLE到底調用什么方式,這個就是init.ora中設定的OPTIMIZER_MODE參數,假如我們設為OPTIMIZER_MODE=RULE,它就會按RBO方式進行,反之按CBO了。當然,我們在開發(fā)程序時也可認為的改變規(guī)則,如SQL: SELECT /*RULE*/ * FROM TABLE_NAME ,這個就使ORACLE強制使用RBO規(guī)則了,當然,ORACLE也比較“聰明”,它會根據用戶檢索表和該表的索引的統(tǒng)計信息來選擇優(yōu)化方式了,這里就出現了一個問題了,假如統(tǒng)計信息是陳舊的或者說是錯誤的,我們就必須用analyze人為的對表和索引進行重新統(tǒng)計了。 ORACLE的優(yōu)化模式有如下幾種:RULE,CHOOSE,FIRSTROWS,ALLROWS四種,這四種模式必須和前面講的優(yōu)化方式放在一起解釋,CHOOSE就是選擇的意思,假如有表和索引有統(tǒng)計信息,ORACLE就會CHOOSE CBO的優(yōu)化方式了。對于FIRSTROWS,我給的解釋是它和CHOOSE差不多,只是以最快的方式返回前面的記錄行了;當然了ALLROWS就是以最快的方式返回所有行。 以上講了ORACLE的優(yōu)化方式和優(yōu)化模式,以及ORACLE如何選擇,下面我再講講我們認為的改變ORACLE的優(yōu)化了: 1、 修改ORACLE的init.ora的OPTIMIZER_MODE參數; 2、 在寫SQL時人為指定優(yōu)化方式,如:SELECT /*RULE*/ * FROM TABLE_NAME 3、 為不讓ORACLE犯錯誤,我們有必要在日常維護中使用如下語句來優(yōu)化表和索引: spool d:/temp/analyze_table.sql SELECT 'analyze table 'table_name' compute statistics;' from user_tables; spool off spool d:/temp/analyze_index.sql SELECT 'analyze index 'index_name' compute statistics;' from user_indexes; spool off 上面的SQL將對我們的表和索引產生批量的SQL,我們再執(zhí)行這些SQL就行了。 OK,這些就是ORACLE的優(yōu)化機理和我們人為的影響了,相信大家明白了,希望對大家有所幫助。