十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
Oracle數(shù)據(jù)庫的初始化參數(shù) 主要來源于兩個Oracle內(nèi)部數(shù)據(jù)字典表:X$KSPPCV X$KSPPI通常我們查詢的v$parameter視圖就來源于這兩個表 只不過隱去了部分參數(shù) 通過以下腳本可以查詢獲得這些被隱含的參數(shù):set linesize column name format a column value format a selectx ksppinm name y ksppstvl value y ksppstdf isdefault decode(bitand(y ksppstvf ) MODIFIED SYSTEM_MOD FALSE ) i *** od decode(bitand(y ksppstvf ) TRUE FALSE ) isadjfromsys x$ksppi x sys x$ksppcv ywherex inst_id = userenv( Instance ) andy inst_id = userenv( Instance ) andx indx = y indx andx ksppinm like %_par% order bytranslate(x ksppinm _ )/這些參數(shù)通常不建議修改 僅作參考目的 供學(xué)習(xí)用 lishixinzhi/Article/program/Oracle/201311/16508
創(chuàng)新互聯(lián)建站專注于索縣企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城開發(fā)。索縣網(wǎng)站建設(shè)公司,為索縣等地區(qū)提供建站服務(wù)。全流程按需定制設(shè)計,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
查詢優(yōu)化器參數(shù)
1. optimizer_mode
查詢優(yōu)化器是為了找一個最高效的執(zhí)行計劃,這個參數(shù)用來定義什么是“高效”,比如是更快還是占用資源更少。在oracle10g中只支持兩個參數(shù)值:
all_rows:提供全部數(shù)據(jù)
first_rows(n):n為大于0的自然數(shù),表示盡快傳輸前面n條數(shù)據(jù)(比如分頁查詢的時候,我第一次只查詢前面10條數(shù)據(jù))
oracle10g默認為all_rows,可以再數(shù)據(jù)庫級別,會話級別,或者執(zhí)行SQL的時候修改該參數(shù)的值。
數(shù)據(jù)庫級別:alter system set optimizer_mode=first_rows(10) scope=spfile;
會話級別:ALTER SESSION SET OPTIMIZER_MODE=first_rows(10);
SQL級別:SELECT /*+ first_rows(10) */ id,name from t1 order by id;
其實,默認all_rows是最好的方式,如果確實是只要查詢小部分數(shù)據(jù),可以在sql級別加上提示,看是否能提高性能。
2. db_file_multiblock_read_count
在多塊讀的情況下(比如全表掃描),該參數(shù)說明一次最多可讀取的數(shù)據(jù)塊數(shù)目。設(shè)置得太小的話,效率低。設(shè)置得太高也不見得就好(太高,會受I/O最大吞吐量限制。比如設(shè)置成一次最多讀取1024塊,但I/O最大吞吐量只允許32塊,那一次最多也只讀取32塊。而且一次讀取很多塊,開銷會偏高。)應(yīng)該通過測試,才能知道應(yīng)該把該參數(shù)設(shè)置成哪一個值。
測試過程:
1. 創(chuàng)建一張大表,比如上千萬行級別的數(shù)據(jù)
2. 循環(huán)設(shè)置該參數(shù)的值,查看全表掃描的速度。類似于以下語句:
[sql] view plain copy
span style="font-size:14px;" declare
l_count pls_integer;
l_time pls_integer;
l_starting_time pls_integer;
l_ending_time pls_integer;
begin
dbms_output.put_line('dbfmbrc seconds');
for l_dbfmbrc in 1..32
loop
execute immediate 'alter session set db_file_multiblock_read_count='||l_dbfmbrc;
l_starting_time := dbms_utility.get_time();
select /*+ full(t) */ count(*) into l_count from big_table t;
l_ending_time := dbms_utility.get_time();
l_time := round((l_ending_time-l_starting_time)/100);
dbms_output.put_line(l_dbfmbrc||' '||l_time);
end loop;
end;
//span
3. optimizer_index_cost_adj
影響走索引掃描的開銷計算。 取值范圍1到10000.默認值為100,超過100后,走索引掃描的開銷越高,從而使得查詢優(yōu)化器更加傾向于使用全表掃描。相反,小于100,索引掃描的開銷就越低,從而使得查詢優(yōu)化器更加傾向于使用索引掃描。從下面索引掃描開銷計算公式可以看出:
io_cost=(blevel+(leaf_blocks+culstering_factor)*selectivity) *optimizer_index_cost_adj/100.
一般是默認值不需要修改,但是如果發(fā)現(xiàn)本應(yīng)該走索引掃描結(jié)果走了全表掃描,可以適當(dāng)調(diào)低該值,但是,這個值不應(yīng)該設(shè)置過低,因為,過低的話,如果兩個索引掃描的開銷不同,可能通過該公式一算,開銷就變成一樣的了??傊?,不建議修改該參數(shù)的值。
PGA參數(shù)
1. workarea_size_policy
管理工作區(qū)域內(nèi)存(PGA)的方式,
auto:oracle10g默認方式,委托給內(nèi)存管理器自動管理(建議不需要修改)
manual:oracle9i默認方式,oracle9i沒有自動管理功能。
2. pga_aggregate_target
如果是自動管理PGA,那么該參數(shù)用于指定實例可用的PGA的大小,默認是SGA的20%。即使今后用的內(nèi)存超過了設(shè)置的值,也沒有關(guān)系,oracle會自動增大PGA的值。比如該參數(shù)設(shè)置的是200M,今后某一時刻,需要300M,也是沒問題的,會自動增長。
3. sort_area_size
手動管理PGA,該參數(shù)指定分配多大的內(nèi)存用于排序操作,過小的話,會影響性能,過大的話浪費空間。很難說一個合適的默認值,因為用戶場景變化非常大,實際情況得實際處理。
4. hash_area_size
手動管理PGA,該參數(shù)用于指定哈希連接的工作區(qū)域大小,同樣建議它的值也很困難。如果過小,那么查詢優(yōu)化器就會高估哈希連接的開銷,偏向于合并連接。
您好,我在別的論壇也看到了您的提問,很高興為您解答:
查看oracle參數(shù)是靜態(tài)或者是動態(tài)[@more@]
select name,value,ISSYS_MODIFIABLE from v$parameter where ISSYS_MODIFIABLE ='IMMEDIATE' order by name ;--動態(tài)參數(shù)
select name,value,ISSYS_MODIFIABLE from v$parameter where ISSYS_MODIFIABLE ='FALSE' order by name ; ----靜態(tài)參數(shù),需要重啟數(shù)據(jù)庫參數(shù)才有效
select name,value,ISSYS_MODIFIABLE from v$parameter where ISSYS_MODIFIABLE ='DERERRED' order by name ;--延遲,當(dāng)前會話不生效,后續(xù)的會話有效
如果我的回答沒幫助到您,請繼續(xù)追問。