oracle查詢命中率調(diào)優(yōu)的一個方法(有用呦)
構(gòu)建一個企業(yè)級的應(yīng)用系統(tǒng),往往數(shù)據(jù)庫成為最終的一個負(fù)載瓶頸,在我們優(yōu)化完sql語句、優(yōu)化完應(yīng)用程序之后,數(shù)據(jù)庫的調(diào)優(yōu)必不可少,下面就基于sql查詢的命中率的oracle調(diào)優(yōu)做一個簡單的說明。
1.先檢驗(yàn)數(shù)據(jù)庫的查詢命中率,請執(zhí)行下面的2組sql語句,并且分別記錄修改之前的數(shù)值。
第一組sql語句如下:
select 100- (j.value-( a.value+b.value )) /(u.value+v.value-a.value-b.value)*100 as 命中率 from
(select value from v$sysstat where name ='physical reads direct' ) a,
(select value from v$sysstat where name ='physical reads direct (lob)' ) b,
(select value from v$sysstat where name ='physical reads') j,
(select value from v$sysstat where name ='consistent gets') u,
(select value from v$sysstat where name = 'db block gets') v ;
第二組sql語句如下:
select sum(gets) "請求存取數(shù)",sum(getmisses) "不命中數(shù)" , (1-sum(getmisses)/sum(gets) )*100 "命中率"
from v$rowcache;
2.如果第一組sql語句執(zhí)行的結(jié)果是<90%,則說明需要調(diào)整oracle數(shù)據(jù)庫的內(nèi)存(SGA的大小),第二組sql語句作為一個參照。
一般經(jīng)驗(yàn):在 1G 的內(nèi)存的服務(wù)器上,我們能分配給SGA的內(nèi)存大約為400—500M 。若是2G的內(nèi)存,大約可以分到1G的內(nèi)存給 SGA,8G 的內(nèi)存可以分到5G的內(nèi)存給SGA。
考慮到數(shù)據(jù)庫服務(wù)器的機(jī)器內(nèi)存大小為2G, 可以按照以下腳本執(zhí)行修改:
【注:請用具有dba權(quán)限的用戶登錄“login as sysdba”登錄,可以用pl/sql工具】
--修改前備份一下sqfile
create pfile='d:\oracle\ora9init.ora' from spfile;
--修改共享池大小
alter system set shared_pool_size =256M scope=spfile;
--修改緩沖池大小
alter system set db_cache_size=896M scope=spfile;
--大緩沖池
alter system set large_pool_size=100m scope=spfile;
--修改鏈接進(jìn)程數(shù)
alter system set processes=1500 scope=spfile;
--會話數(shù)
alter system set sessions=900 scope=spfile;
--事務(wù)數(shù)
alter system set transactions=900 scope=spfile;
--打開游標(biāo)數(shù)
alter system set open_cursors =1000 scope=spfile;
3.用pl/sql工具修改了這些參數(shù)之后,需要重啟oracle服務(wù)。當(dāng)重啟之后再查執(zhí)行開始的2組sql語句,對比數(shù)值的差異。
posted on 2010-07-21 06:37 風(fēng) 閱讀(325) 評論(0) 編輯 收藏 所屬分類: Oracle