兩個(gè)辦法:一、優(yōu)化硬件(CPU、內(nèi)存和硬盤等),優(yōu)化I/O子系統(tǒng),增強(qiáng)IO讀寫能力;第二、優(yōu)化SQL語(yǔ)句。第一種辦法治標(biāo)不治本,建議用第二種辦法,你的截圖里邊那幾個(gè)幾百秒的SQL語(yǔ)句是有問(wèn)題的,要進(jìn)一步優(yōu)化。查看一下執(zhí)行這些語(yǔ)句是在哪些頁(yè)面,查詢了什么數(shù)據(jù),數(shù)據(jù)量多大,判斷一下業(yè)務(wù)邏輯,然后再去優(yōu)化。

成都創(chuàng)新互聯(lián)是一家專業(yè)的成都網(wǎng)站建設(shè)公司,我們專注網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、網(wǎng)絡(luò)營(yíng)銷、企業(yè)網(wǎng)站建設(shè),賣友情鏈接,廣告投放為企業(yè)客戶提供一站式建站解決方案,能帶給客戶新的互聯(lián)網(wǎng)理念。從網(wǎng)站結(jié)構(gòu)的規(guī)劃UI設(shè)計(jì)到用戶體驗(yàn)提高,創(chuàng)新互聯(lián)力求做到盡善盡美。
(如有幫助,請(qǐng)采納,謝謝)
1、調(diào)整數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)
這一部分在開(kāi)發(fā)信息系統(tǒng)之前完成,程序員需要考慮是否使用ORACLE數(shù)據(jù)庫(kù)的分區(qū)功能,對(duì)于經(jīng)常訪問(wèn)的數(shù)據(jù)庫(kù)表是否需要建立索引等。
2、調(diào)整應(yīng)用程序結(jié)構(gòu)設(shè)計(jì)
這一部分也是在開(kāi)發(fā)信息系統(tǒng)之前完成,程序員在這一步需要考慮應(yīng)用程序使用什么樣的體系結(jié)構(gòu),是使用傳統(tǒng)的Client/Server兩層體系結(jié)構(gòu),還是使用Browser/Web/Database的三層體系結(jié)構(gòu)。不同的應(yīng)用程序體系結(jié)構(gòu)要求的數(shù)據(jù)庫(kù)資源是不同的。
3、調(diào)整數(shù)據(jù)庫(kù)SQL語(yǔ)句
應(yīng)用程序的執(zhí)行最終將歸結(jié)為數(shù)據(jù)庫(kù)中的SQL語(yǔ)句執(zhí)行,因此SQL語(yǔ)句的執(zhí)行效率最終決定了ORACLE數(shù)據(jù)庫(kù)的性能。ORACLE公司推薦使用ORACLE語(yǔ)句優(yōu)化器(OracleOptimizer)和行鎖管理器(row-levelmanager)來(lái)調(diào)整優(yōu)化SQL語(yǔ)句。
4、調(diào)整服務(wù)器內(nèi)存分配
內(nèi)存分配是在信息系統(tǒng)運(yùn)行過(guò)程中優(yōu)化配置的,數(shù)據(jù)庫(kù)管理員可以根據(jù)數(shù)據(jù)庫(kù)運(yùn)行狀況調(diào)整數(shù)據(jù)庫(kù)系統(tǒng)全局區(qū)(SGA區(qū))的數(shù)據(jù)緩沖區(qū)、日志緩沖區(qū)和共享池的大小;還可以調(diào)整程序全局區(qū)(PGA區(qū))的大小。需要注意的是,SGA區(qū)不是越大越好,SGA區(qū)過(guò)大會(huì)占用操作系統(tǒng)使用的內(nèi)存而引起虛擬內(nèi)存的頁(yè)面交換,這樣反而會(huì)降低系統(tǒng)。
5、調(diào)整硬盤I/O
這一步是在信息系統(tǒng)開(kāi)發(fā)之前完成的。數(shù)據(jù)庫(kù)管理員可以將組成同一個(gè)表空間的數(shù)據(jù)文件放在不同的硬盤上,做到硬盤之間I/O負(fù)載均衡。
6、調(diào)整操作系統(tǒng)參數(shù)
例如:運(yùn)行在UNIX操作系統(tǒng)上的ORACLE數(shù)據(jù)庫(kù),可以調(diào)整UNIX數(shù)據(jù)緩沖池的大小,每個(gè)進(jìn)程所能使用的內(nèi)存大小等參數(shù)。
實(shí)際上,上述數(shù)據(jù)庫(kù)優(yōu)化措施之間是相互聯(lián)系的。ORACLE數(shù)據(jù)庫(kù)性能惡化表現(xiàn)基本上都是用戶響應(yīng)時(shí)間比較長(zhǎng),需要用戶長(zhǎng)時(shí)間的等待。但性能惡化的原因卻是多種多樣的,有時(shí)是多個(gè)因素共同造成了性能惡化的結(jié)果,這就需要數(shù)據(jù)庫(kù)管理員有比較全面的計(jì)算機(jī)知識(shí),能夠敏感地察覺(jué)到影響數(shù)據(jù)庫(kù)性能的主要原因所在。另外,良好的數(shù)據(jù)庫(kù)管理工具對(duì)于優(yōu)化數(shù)據(jù)庫(kù)性能也是很重要的。
一、ORACLE數(shù)據(jù)庫(kù)性能優(yōu)化工具
常用的數(shù)據(jù)庫(kù)性能優(yōu)化工具有:
ORACLE數(shù)據(jù)庫(kù)在線數(shù)據(jù)字典,ORACLE在線數(shù)據(jù)字典能夠反映出ORACLE動(dòng)態(tài)運(yùn)行情況,對(duì)于調(diào)整數(shù)據(jù)庫(kù)性能是很有幫助的。
操作系統(tǒng)工具,例如UNIX操作系統(tǒng)的vmstat,iostat等命令可以查看到系統(tǒng)系統(tǒng)級(jí)內(nèi)存和硬盤I/O的使用情況,這些工具對(duì)于管理員弄清出系統(tǒng)瓶頸出現(xiàn)在什么地方有時(shí)候很有用。
SQL語(yǔ)言跟蹤工具(SQLTRACEFACILITY),SQL語(yǔ)言跟蹤工具可以記錄SQL語(yǔ)句的執(zhí)行情況,管理員可以使用虛擬表來(lái)調(diào)整實(shí)例,使用SQL語(yǔ)句跟蹤文件調(diào)整應(yīng)用程序性能。SQL語(yǔ)言跟蹤工具將結(jié)果輸出成一個(gè)操作系統(tǒng)的文件,管理員可以使用TKPROF工具查看這些文件。
ORACLEEnterpriseManager(OEM),這是一個(gè)圖形的用戶管理界面,用戶可以使用它方便地進(jìn)行數(shù)據(jù)庫(kù)管理而不必記住復(fù)雜的ORACLE數(shù)據(jù)庫(kù)管理的命令。
EXPLAINPLAN——SQL語(yǔ)言優(yōu)化命令,使用這個(gè)命令可以幫助程序員寫出高效的SQL語(yǔ)言。
二、ORACLE數(shù)據(jù)庫(kù)的系統(tǒng)性能評(píng)估
信息系統(tǒng)的類型不同,需要關(guān)注的數(shù)據(jù)庫(kù)參數(shù)也是不同的。數(shù)據(jù)庫(kù)管理員需要根據(jù)自己的信息系統(tǒng)的類型著重考慮不同的數(shù)據(jù)庫(kù)參數(shù)。
1、在線事務(wù)處理信息系統(tǒng)(OLTP),這種類型的信息系統(tǒng)一般需要有大量的Insert、Update操作,典型的系統(tǒng)包括民航機(jī)票發(fā)售系統(tǒng)、銀行儲(chǔ)蓄系統(tǒng)等。OLTP系統(tǒng)需要保證數(shù)據(jù)庫(kù)的并發(fā)性、可靠性和最終用戶的速度,這類系統(tǒng)使用的ORACLE數(shù)據(jù)庫(kù)需要主要考慮下述參數(shù):
數(shù)據(jù)庫(kù)回滾段是否足夠?
是否需要建立ORACLE數(shù)據(jù)庫(kù)索引、聚集、散列?
系統(tǒng)全局區(qū)(SGA)大小是否足夠?
SQL語(yǔ)句是否高效?
2、數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)(DataWarehousing),這種信息系統(tǒng)的主要任務(wù)是從ORACLE的海量數(shù)據(jù)中進(jìn)行查詢,得到數(shù)據(jù)之間的某些規(guī)律。數(shù)據(jù)庫(kù)管理員需要為這種類型的ORACLE數(shù)據(jù)庫(kù)著重考慮下述參數(shù):
是否采用B*-索引或者bitmap索引?
是否采用并行SQL查詢以提高查詢效率?
是否采用PL/SQL函數(shù)編寫存儲(chǔ)過(guò)程?
有必要的話,需要建立并行數(shù)據(jù)庫(kù)提高數(shù)據(jù)庫(kù)的查詢效率
三、SQL語(yǔ)句的調(diào)整原則
SQL語(yǔ)言是一種靈活的語(yǔ)言,相同的功能可以使用不同的語(yǔ)句來(lái)實(shí)現(xiàn),但是語(yǔ)句的執(zhí)行效率是很不相同的。程序員可以使用EXPLAINPLAN語(yǔ)句來(lái)比較各種實(shí)現(xiàn)方案,并選出最優(yōu)的實(shí)現(xiàn)方案。總得來(lái)講,程序員寫SQL語(yǔ)句需要滿足考慮如下規(guī)則:
1、盡量使用索引。試比較下面兩條SQL語(yǔ)句:
語(yǔ)句A:SELECTdname,deptnoFROMdeptWHEREdeptnoNOTIN
(SELECTdeptnoFROMemp);
語(yǔ)句B:SELECTdname,deptnoFROMdeptWHERENOTEXISTS
(SELECTdeptnoFROMempWHEREdept.deptno=emp.deptno);
這兩條查詢語(yǔ)句實(shí)現(xiàn)的結(jié)果是相同的,但是執(zhí)行語(yǔ)句A的時(shí)候,ORACLE會(huì)對(duì)整個(gè)emp表進(jìn)行掃描,沒(méi)有使用建立在emp表上的deptno索引,執(zhí)行語(yǔ)句B的時(shí)候,由于在子查詢中使用了聯(lián)合查詢,ORACLE只是對(duì)emp表進(jìn)行的部分?jǐn)?shù)據(jù)掃描,并利用了deptno列的索引,所以語(yǔ)句B的效率要比語(yǔ)句A的效率高一些。
2、選擇聯(lián)合查詢的聯(lián)合次序。考慮下面的例子:
SELECTstuffFROMtabaa,tabbb,tabcc
WHEREa.acolbetween:alowand:ahigh
ANDb.bcolbetween:blowand:bhigh
ANDc.ccolbetween:clowand:chigh
ANDa.key1=b.key1
AMDa.key2=c.key2;
這個(gè)SQL例子中,程序員首先需要選擇要查詢的主表,因?yàn)橹鞅硪M(jìn)行整個(gè)表數(shù)據(jù)的掃描,所以主表應(yīng)該數(shù)據(jù)量最小,所以例子中表A的acol列的范圍應(yīng)該比表B和表C相應(yīng)列的范圍小。
3、在子查詢中慎重使用IN或者NOTIN語(yǔ)句,使用where(NOT)exists的效果要好的多。
4、慎重使用視圖的聯(lián)合查詢,尤其是比較復(fù)雜的視圖之間的聯(lián)合查詢。一般對(duì)視圖的查詢最好都分解為對(duì)數(shù)據(jù)表的直接查詢效果要好一些。
5、可以在參數(shù)文件中設(shè)置SHARED_POOL_RESERVED_SIZE參數(shù),這個(gè)參數(shù)在SGA共享池中保留一個(gè)連續(xù)的內(nèi)存空間,連續(xù)的內(nèi)存空間有益于存放大的SQL程序包。
6、ORACLE公司提供的DBMS_SHARED_POOL程序可以幫助程序員將某些經(jīng)常使用的存儲(chǔ)過(guò)程“釘”在SQL區(qū)中而不被換出內(nèi)存,程序員對(duì)于經(jīng)常使用并且占用內(nèi)存很多的存儲(chǔ)過(guò)程“釘”到內(nèi)存中有利于提高最終用戶的響應(yīng)時(shí)間。
四、CPU參數(shù)的調(diào)整
CPU是服務(wù)器的一項(xiàng)重要資源,服務(wù)器良好的工作狀態(tài)是在工作高峰時(shí)CPU的使用率在90%以上。如果空閑時(shí)間CPU使用率就在90%以上,說(shuō)明服務(wù)器缺乏CPU資源,如果工作高峰時(shí)CPU使用率仍然很低,說(shuō)明服務(wù)器CPU資源還比較富余。
使用操作相同命令可以看到CPU的使用情況,一般UNIX操作系統(tǒng)的服務(wù)器,可以使用sar_u命令查看CPU的使用率,NT操作系統(tǒng)的服務(wù)器,可以使用NT的性能管理器來(lái)查看CPU的使用率。
數(shù)據(jù)庫(kù)管理員可以通過(guò)查看v$sysstat數(shù)據(jù)字典中“CPUusedbythissession”統(tǒng)計(jì)項(xiàng)得知ORACLE數(shù)據(jù)庫(kù)使用的CPU時(shí)間,查看“OSUserlevelCPUtime”統(tǒng)計(jì)項(xiàng)得知操作系統(tǒng)用戶態(tài)下的CPU時(shí)間,查看“OSSystemcallCPUtime”統(tǒng)計(jì)項(xiàng)得知操作系統(tǒng)系統(tǒng)態(tài)下的CPU時(shí)間,操作系統(tǒng)總的CPU時(shí)間就是用戶態(tài)和系統(tǒng)態(tài)時(shí)間之和,如果ORACLE數(shù)據(jù)庫(kù)使用的CPU時(shí)間占操作系統(tǒng)總的CPU時(shí)間90%以上,說(shuō)明服務(wù)器CPU基本上被ORACLE數(shù)據(jù)庫(kù)使用著,這是合理,反之,說(shuō)明服務(wù)器CPU被其它程序占用過(guò)多,ORACLE數(shù)據(jù)庫(kù)無(wú)法得到更多的CPU時(shí)間。
數(shù)據(jù)庫(kù)管理員還可以通過(guò)查看v$sesstat數(shù)據(jù)字典來(lái)獲得當(dāng)前連接ORACLE數(shù)據(jù)庫(kù)各個(gè)會(huì)話占用的CPU時(shí)間,從而得知什么會(huì)話耗用服務(wù)器CPU比較多。
出現(xiàn)CPU資源不足的情況是很多的:SQL語(yǔ)句的重解析、低效率的SQL語(yǔ)句、鎖沖突都會(huì)引起CPU資源不足。
1、數(shù)據(jù)庫(kù)管理員可以執(zhí)行下述語(yǔ)句來(lái)查看SQL語(yǔ)句的解析情況:
SELECT*FROMV$SYSSTATWHERENAMEIN
('parsetimecpu','parsetimeelapsed','parsecount(hard)');
這里parsetimecpu是系統(tǒng)服務(wù)時(shí)間,parsetimeelapsed是響應(yīng)時(shí)間,用戶等待時(shí)間,waitetime=parsetimeelapsed_parsetimecpu
由此可以得到用戶SQL語(yǔ)句平均解析等待時(shí)間=waitetime/parsecount。這個(gè)平均等待時(shí)間應(yīng)該接近于0,如果平均解析等待時(shí)間過(guò)長(zhǎng),數(shù)據(jù)庫(kù)管理員可以通過(guò)下述語(yǔ)句
SELECTSQL_TEXT,PARSE_CALLS,EXECUTIONSFROMV$SQLAREA
ORDERBYPARSE_CALLS;
來(lái)發(fā)現(xiàn)是什么SQL語(yǔ)句解析效率比較低。程序員可以優(yōu)化這些語(yǔ)句,或者增加ORACLE參數(shù)SESSION_CACHED_CURSORS的值。
2、數(shù)據(jù)庫(kù)管理員還可以通過(guò)下述語(yǔ)句:
SELECTBUFFER_GETS,EXECUTIONS,SQL_TEXTFROMV$SQLAREA;
查看低效率的SQL語(yǔ)句,優(yōu)化這些語(yǔ)句也有助于提高CPU的利用率。
3、數(shù)據(jù)庫(kù)管理員可以通過(guò)v$system_event數(shù)據(jù)字典中的“l(fā)atchfree”統(tǒng)計(jì)項(xiàng)查看ORACLE數(shù)據(jù)庫(kù)的沖突情況,如果沒(méi)有沖突的話,latchfree查詢出來(lái)沒(méi)有結(jié)果。如果沖突太大的話,數(shù)據(jù)庫(kù)管理員可以降低spin_count參數(shù)值,來(lái)消除高的CPU使用率。
五、內(nèi)存參數(shù)的調(diào)整
內(nèi)存參數(shù)的調(diào)整主要是指ORACLE數(shù)據(jù)庫(kù)的系統(tǒng)全局區(qū)(SGA)的調(diào)整。SGA主要由三部分構(gòu)成:共享池、數(shù)據(jù)緩沖區(qū)、日志緩沖區(qū)。
1、共享池由兩部分構(gòu)成:共享SQL區(qū)和數(shù)據(jù)字典緩沖區(qū),共享SQL區(qū)是存放用戶SQL命令的區(qū)域,數(shù)據(jù)字典緩沖區(qū)存放數(shù)據(jù)庫(kù)運(yùn)行的動(dòng)態(tài)信息。數(shù)據(jù)庫(kù)管理員通過(guò)執(zhí)行下述語(yǔ)句:
select(sum(pins-reloads))/sum(pins)"LibCache"fromv$librarycache;
來(lái)查看共享SQL區(qū)的使用率。這個(gè)使用率應(yīng)該在90%以上,否則需要增加共享池的大小。數(shù)據(jù)庫(kù)管理員還可以執(zhí)行下述語(yǔ)句:
select(sum(gets-getmisses-usage-fixed))/sum(gets)"RowCache"fromv$rowcache;
查看數(shù)據(jù)字典緩沖區(qū)的使用率,這個(gè)使用率也應(yīng)該在90%以上,否則需要增加共享池的大小。
2、數(shù)據(jù)緩沖區(qū)。數(shù)據(jù)庫(kù)管理員可以通過(guò)下述語(yǔ)句:
SELECTname,valueFROMv$sysstatWHEREnameIN('dbblockgets','consistentgets','physicalreads');
來(lái)查看數(shù)據(jù)庫(kù)數(shù)據(jù)緩沖區(qū)的使用情況。查詢出來(lái)的結(jié)果可以計(jì)算出來(lái)數(shù)據(jù)緩沖區(qū)的使用命中率=1-(physicalreads/(dbblockgets+consistentgets))。
這個(gè)命中率應(yīng)該在90%以上,否則需要增加數(shù)據(jù)緩沖區(qū)的大小。
3、日志緩沖區(qū)。數(shù)據(jù)庫(kù)管理員可以通過(guò)執(zhí)行下述語(yǔ)句:
selectname,valuefromv$sysstatwherenamein('redoentries','redologspacerequests');
查看日志緩沖區(qū)的使用情況。查詢出的結(jié)果可以計(jì)算出日志緩沖區(qū)的申請(qǐng)失敗率:
申請(qǐng)失敗率=requests/entries,申請(qǐng)失敗率應(yīng)該接近于0,否則說(shuō)明日志緩沖區(qū)開(kāi)設(shè)太小,需要增加ORACLE數(shù)據(jù)庫(kù)的日志緩沖區(qū)。
昆明北大青鳥(niǎo)java培訓(xùn)班轉(zhuǎn)載自網(wǎng)絡(luò)如有侵權(quán)請(qǐng)聯(lián)系我們感謝您的關(guān)注謝謝支持
一、 磁盤方面調(diào)優(yōu)
1. 規(guī)范磁盤陣列
RAID 10比RAID5更適用于OLTP系統(tǒng),RAID10先鏡像磁盤,再對(duì)其進(jìn)行分段,由于對(duì)數(shù)據(jù)的小規(guī)模訪問(wèn)會(huì)比較頻繁,所以對(duì)OLTP適用。而RAID5,優(yōu)勢(shì)在于能夠充分利用磁盤空間,并且減少陣列的總成本。但是由于陣列發(fā)出一個(gè)寫入請(qǐng)求時(shí),必須改變磁盤上已修改的塊,需要從磁盤上讀取“奇偶校驗(yàn)”塊,并且使用已修改的塊計(jì)算新的奇偶校驗(yàn)塊,然后把數(shù)據(jù)寫入磁盤,且會(huì)限制吞吐量。對(duì)性能有所影響,RAID5適用于OLAP系統(tǒng)。
2. 數(shù)據(jù)文件分布
分離下面的東西,避免磁盤競(jìng)爭(zhēng)
? SYSTEM表空間
? TEMPORARY表空間
? UNDO表空間
? 聯(lián)機(jī)重做日志(放在最快的磁盤上)
? 操作系統(tǒng)磁盤
? ORACLE安裝目錄
? 經(jīng)常被訪問(wèn)的數(shù)據(jù)文件
? 索引表空間
? 歸檔區(qū)域(應(yīng)該總是與將要恢復(fù)的數(shù)據(jù)分離)
例:
2 /: System
2 /u01: Oracle Software
2 /u02: Temporary tablespace, Control file1
2 /u03: Undo Segments, Control file2
2 /u04: Redo logs, Archive logs, Control file4
2 /u05: System, SYSAUX tablespaces
2 /u06: Data1 ,control file3
2 /u07: Index tablespace
2 /u08: Data2
通過(guò)下列語(yǔ)句查詢確定IO問(wèn)題
select name ,phyrds,phywrts,readtim,writetim
from v$filestat a,v$datafile b
where a.file#=b.file# order by readtim desc;
3. 增大日志文件
u 增大日志文件的大小,從而增加處理大型INSERT,DELETE,UPDATE操作的比例
查詢?nèi)罩疚募顟B(tài)
select a.member,b.* from v$logfile a,v$log b where a.GROUP#=b.GROUP#
查詢?nèi)罩厩袚Q時(shí)間
select b.RECID,to_char(b.FIRST_TIME,'yyyy-mm-dd hh24:mi:ss') start_time,a.RECID,to_char(a.FIRST_TIME,'yyyy-mm-dd hh24:mi:ss') end_time,round(((a.FIRST_TIME-b.FIRST_TIME)*25)*60,2) minutes
from v$log_history a ,v$log_history b
where a.RECID=b.RECID+1
order by a.FIRST_TIME desc
增大日志文件大小,以及對(duì)每組增加日志文件(一個(gè)主文件、一個(gè)多路利用文件)
u 增大LOG_CHECKPOINT_INTERVAL參數(shù),現(xiàn)已不提倡使用它
如果低于每半小時(shí)切換一次日志,就增大聯(lián)機(jī)重做日志大小。如果處理大型批處理任務(wù)時(shí)頻繁進(jìn)行切換,就增大聯(lián)機(jī)重做日志數(shù)目。
alter database add logfile member ‘/log.ora’ to group 1;
alter database drop logfile member ‘/log.ora’;
4. UNDO表空間
修改三個(gè)初始參數(shù):
UNDO_MANAGEMENT=AUTO
UNDO_TABLESPACE=CLOUDSEA_UNDO
UNDO_RETENTION=#of minutes
5. 不要在系統(tǒng)表空間中執(zhí)行排序
二、 初始化參數(shù)調(diào)優(yōu)
32位的尋址最大支持應(yīng)該是2的32次方,就是4G大小。但實(shí)際中32位系統(tǒng)(XP,windows2003等MS32位系統(tǒng), ubuntu等linux32 位系統(tǒng))要能利用4G內(nèi)存,都是采用內(nèi)存重映射技術(shù)。需要主板及系統(tǒng)的支持。如果關(guān)閉主板BIOS的重映射功能,系統(tǒng)將不能利用4G內(nèi)存,可能只達(dá)3.5G.而在windows下看到的一般為3.25G。所以SGA設(shè)置為內(nèi)存的40%,但不能超過(guò)3.25G
1. 重要初始化參數(shù)
l SGA_MAX_SIZE
l SGA_TARGET
l PGA_AGGREGATE_TARGET
l DB_CACHE_SIZE
l SHARED_POOL_SIZE
2. 調(diào)整DB_CACHE_SIZE來(lái)提高性能
它設(shè)定了用來(lái)存儲(chǔ)和處理內(nèi)存中數(shù)據(jù)的SGA區(qū)域大小,從內(nèi)存中取數(shù)據(jù)比磁盤快10000倍以上
根據(jù)以下查詢出數(shù)據(jù)緩存命中率
select sum(decode(name,'physical reads',value,0)) phys,
sum(decode(name,'db block gets',value,0)) gets,
sum(decode(name,'consistent gets',value,0)) con_gets,
(1- (sum(decode(name,'physical reads',value,0))/(sum(decode(name,'db block gets',value,0))+sum(decode(name,'consistent gets',value,0)) ) ))*100 Hitratio
from v$sysstat;
一個(gè)事務(wù)處理程序應(yīng)該保證得到95%以上的命中率,命中率從90%提高到98%可能會(huì)提高500%的性能,ORACLE正在通過(guò)CPU或服務(wù)時(shí)間與等待時(shí)間來(lái)分析系統(tǒng)性能,不太重視命中率,不過(guò)現(xiàn)在的庫(kù)緩存和字典緩存仍將命中率作為基本的調(diào)整方法。
在調(diào)整DB_CACHE_SIZE時(shí)使用V$DB_CACHE_ADVICE
select size_for_estimate, estd_physical_read_factor, estd_physical_reads
from v$db_cache_advice
where name = 'DEFAULT';
如果查詢的命中率過(guò)低,說(shuō)明缺少索引或者索引受到限制,通過(guò)V$SQLAREA視圖查詢執(zhí)行緩慢的SQL
3. 設(shè)定DB_BLOCK_SIZE來(lái)反映數(shù)據(jù)讀取量大小
OLTP一般8K
OLAP一般16K或者32K
4. 調(diào)整SHARED_POOL_SIZE以優(yōu)化性能
正確地調(diào)整此參數(shù)可以同等可能地共享SQL語(yǔ)句,使得在內(nèi)存中便能找到使用過(guò)的SQL語(yǔ)句。為了減少硬解析次數(shù),優(yōu)化對(duì)共享SQL區(qū)域的使用,需盡量使用存儲(chǔ)過(guò)程、使用綁定變量
保證數(shù)據(jù)字典緩存命中率在95%以上
select ((1- sum(getmisses)/(sum(gets)+sum(getmisses)))*100) hitratio
from v$rowcache
where gets+getmisses 0;
如果命中率小于 99%,就可以考慮增加shared pool 以提高library cache 的命中率
SELECT SUM(PINS) "EXECUTIONS",SUM(RELOADS) "CACHE MISSES WHILE EXECUTING",1 - SUM(RELOADS)/SUM(PINS)
FROM V$LIBRARYCACHE;
通常規(guī)則是把它定為DB_CACHE_SIZE大小的50%-150%,在使用了大量存儲(chǔ)過(guò)程或程序包,但只有有限內(nèi)存的系統(tǒng)里,最后分配為150%。在沒(méi)有使用存儲(chǔ)過(guò)程但大量分配內(nèi)存給DB_CACHE_SIZE的系統(tǒng)里,這個(gè)參數(shù)應(yīng)該為10%-20%
5. 調(diào)整PGA_AGGREGATE_TARGET以優(yōu)化對(duì)內(nèi)存的應(yīng)用
u OLTP :totalmemory*80%*20%
u DSS: totalmemory*80%*50%
6. 25個(gè)重要初始化參數(shù)
2 DB_CACHE_SIZE:分配給數(shù)據(jù)緩存的初始化內(nèi)存
2 SGA_TARGET:使用了自動(dòng)內(nèi)存管理,則設(shè)置此參數(shù)。設(shè)置為0可禁用它
2 PGA_AGGREGATE_TARGET:所有用戶PGA軟內(nèi)存最大值
2 SHARED_POOL_SIZE:分配給數(shù)據(jù)字典、SQL和PL/SQL的內(nèi)存
2 SGA_MAX_SIZE:SGA可動(dòng)態(tài)增長(zhǎng)的最大內(nèi)存
2 OPTIMIZER_MODE:
2 CURSOR_SHARING:把字面SQL轉(zhuǎn)換成帶綁定變更的SQL,可減少硬解析開(kāi)銷
2 OPTIMIZER_INDEX_COST_ADJ:索引掃描成本和全表掃描成本進(jìn)行調(diào)整,設(shè)定在1-10間會(huì)強(qiáng)制頻繁地使用索引,保證索引可用性
2 QUERY_REWRITE_ENABLED:用于啟用具體化視圖和基于函數(shù)的索引功能
2 DB_FILE_MULTIBLOCK_READ_COUNT:對(duì)于全表掃描,為了更有效執(zhí)行IO,此參數(shù)可在一次IO中讀取多個(gè)塊
2 LOG_BUFFER:為內(nèi)存中沒(méi)有提交的事務(wù)分配緩沖區(qū)(非動(dòng)態(tài)參數(shù))
2 DB_KEEP_CACHE_SIZE:分配給KEEP池或者額外數(shù)據(jù)緩存的內(nèi)存
2 DB_RECYCLE_CACHE_SIZE:
2 DBWR_IO_SLAVES:如果沒(méi)有異步IO,參數(shù)等同于DB_WRITER_PROCESSES模擬異步IO而分配的從SGA到磁盤的寫入器數(shù)。如果有異步IO,則使用DB_WRITER_PROCESSES設(shè)置多個(gè)寫程序,在DBWR期間更快地寫出臟塊
2 LARGE_POOL_SIZE:分配給大型PLSQL或其他一些很少使用的ORACLE選項(xiàng)LARGET池的總塊數(shù)
2 STATISTICS_LEVEL:?jiǎn)⒂妙檰?wèn)信息,并可選擇提供更多OS統(tǒng)計(jì)信息來(lái)改進(jìn)優(yōu)化器決策。默認(rèn):TYPICAL
2 JAVA_POOL_SIZE:為JVM使用的JAVA存儲(chǔ)過(guò)程所分配的內(nèi)存
2 JAVA_MAX_SESSIONSPACE_SIZE:跟蹤JAVA類的用戶會(huì)話狀態(tài)所用內(nèi)存上限
2 MAX_SHARED_SERVERS:當(dāng)使用共享服務(wù)器時(shí)的共享服務(wù)器上限
2 WORKAREA_SIZE_POLICY:?jiǎn)⒂肞GA大小自動(dòng)管理
2 FAST_START_MTTR_TARGET:完成一次崩潰恢復(fù)的大概時(shí)間/S
2 LOG_CHECKPOINT_INTERVAL:檢查點(diǎn)頻率
2 OPEN_CURSORS:指定了保存用戶語(yǔ)句的專用區(qū)域大小,如此設(shè)置過(guò)高會(huì)導(dǎo)致ORA-4031
2 DB_BLOCK_SIZE:數(shù)據(jù)庫(kù)默認(rèn)塊大小
2 OPTIMIZER_DYNAMIC_SAMPLING:控制動(dòng)態(tài)抽樣查詢讀取的塊數(shù)量,對(duì)正在使用全局臨時(shí)表的系統(tǒng)非常有用
三、 SQL調(diào)優(yōu)1. 使用提示
1.1 改變執(zhí)行路徑
通過(guò)OPTIMIZER_MODE參數(shù)指定優(yōu)化器使用方法,默認(rèn)ALL_ROWS
? ALL_ROWS 可得最佳吞吐量執(zhí)行查詢所有行
? FIRST_ROWS(n) 可使優(yōu)化器最快檢索出第一行:
select /*+ FIRST_ROWS(1) */ store_id,… from tbl_store
1.2 使用訪問(wèn)方法提示
允許開(kāi)發(fā)人員改變?cè)L問(wèn)的實(shí)際查詢方式,經(jīng)常使用INDEX提示
? CLUSTER 強(qiáng)制使用集群
? FULL
? HASH
? INDEX 語(yǔ)法:/*+ INDEX (TABLE INDEX1,INDEX2….) */ COLUMN 1,….
當(dāng)不指定任何INDEX時(shí),優(yōu)化器會(huì)選擇最佳的索引
SELECT /*+ INDEX */ STORE_ID FROM TBL_STORE
? INDEX_ASC 8I開(kāi)始默認(rèn)是升序,所以與INDEX同效
? INDEX_DESC
? INDEX_COMBINE 用來(lái)指定多個(gè)位圖索引,而不是選擇其中最好的索引
? INDEX_JOIN 只需訪問(wèn)這些索引,節(jié)省了重新檢索表的時(shí)間
? INDEX_FFS 執(zhí)行一次索引的快速全局掃描,只處理索引,不訪問(wèn)具體表
? INDEX_SS
? INDEX_SSX_ASC
? INDEX_SS_DESC
? NO_INDEX
? NO_INDEX_FFS
? NO_INDEX_SS
1.3 使用查詢轉(zhuǎn)換提示
對(duì)于數(shù)據(jù)倉(cāng)庫(kù)非常有幫助
? FACT
? MERGE
? NO_EXPAND 語(yǔ)法:/*+ NO_EXPAND */ column1,…
保證OR組合起的IN列表不會(huì)陷入困境,/*+ FIRST_ROWS NO_EXPAND */
? NO_FACT
? NO_MERGE
? NO_QUERY_TRANSFORMATION
? NO_REWRITE
? NO_STAR_TRANSFORMATION
? NO_UNSET
? REWRITE
? STAR_TRANSFORMATION
? UNSET
? USE_CONCAT
1.4 使用連接操作提示
顯示如何將連接表中的數(shù)據(jù)合并在一起,可用兩提示直接影響連接順序。LEADING指定連接順序首先使用的表,ORDERED告訴優(yōu)化器基于FROM子句中的表順序連接這些表,并使用第一個(gè)表作為驅(qū)動(dòng)表(最行訪問(wèn)的表)
ORDERED語(yǔ)法:/*+ ORDERED */ column 1,….
訪問(wèn)表順序根據(jù)FROM后的表順序來(lái)
LEADING語(yǔ)法:/*+ LEADING(TABLE1) */ column 1,….
類似于ORDER,指定驅(qū)動(dòng)表
? NO_USE_HASH
? NO_USE_MERGE
? NO_USE_NL
? USE_HASH前提足夠的HASH_AREA_SIZE或PGA_AGGREGATE_TARGET
通常可以為較大的結(jié)果集提供最佳的響應(yīng)時(shí)間
? USE_MERGE
? USE_NL 通常可以以最快速度返回一個(gè)行
? USE_NL_WITH_INDEX
1.5 使用并行執(zhí)行
? NO_PARALLEL
? NO_PARALLEL_INDEX
? PARALLEL
? PARALLEL_INDEX
? PQ_DISTRIBUTE
1.6 其他提示
? APPEND 不會(huì)檢查當(dāng)前所用塊中是否有剩余空間,而直接插入到表中,會(huì)直接將數(shù)據(jù)添加到新的塊中。
? CACHE 會(huì)將全表掃描全部緩存到內(nèi)存中,這樣可直接在內(nèi)存中找到數(shù)據(jù),不用在磁盤上查詢
? CURSOR_SHARING_EXACT
? DRIVING_SITE
? DYNAMIC_SAMPLING
? MODEL_MIN_ANALYSIS
? NOAPPEND
? NOCACHE
? NO_PUSH_PRED
? NO_PUSH_SUBQ
? NO_PX_JOIN_FILTER
? PUSH_PRED
? PUSH_SUBQ 強(qiáng)制先執(zhí)行子查詢,當(dāng)子查詢很快返回少量行時(shí),這些行可以用于限制外部查詢返回行數(shù),可極大地提高性能
例:select /*+PUSH_SUBQ */ emp.empno,emp.ename
From emp,orders
where emp.deptno=(select deptno from dept where loc=’1’)
? PX_JOIN_FILTER
? QB_NAME
2. 調(diào)整查詢
2.1 在V$SQLAREA中選出最占用資源的查詢
HASH_VALUE:SQL語(yǔ)句的Hash值。
ADDRESS:SQL語(yǔ)句在SGA中的地址。
PARSING_USER_ID:為語(yǔ)句解析第一條CURSOR的用戶
VERSION_COUNT:語(yǔ)句cursor的數(shù)量
KEPT_VERSIONS:
SHARABLE_MEMORY:cursor使用的共享內(nèi)存總數(shù)
PERSISTENT_MEMORY:cursor使用的常駐內(nèi)存總數(shù)
RUNTIME_MEMORY:cursor使用的運(yùn)行時(shí)內(nèi)存總數(shù)。
SQL_TEXT:SQL語(yǔ)句的文本(最大只能保存該語(yǔ)句的前1000個(gè)字符)。
MODULE,ACTION:用了DBMS_APPLICATION_INFO時(shí)session解析第一條cursor時(shí)信息
SORTS: 語(yǔ)句的排序數(shù)
CPU_TIME: 語(yǔ)句被解析和執(zhí)行的CPU時(shí)間
ELAPSED_TIME: 語(yǔ)句被解析和執(zhí)行的共用時(shí)間
PARSE_CALLS: 語(yǔ)句的解析調(diào)用(軟、硬)次數(shù)
EXECUTIONS: 語(yǔ)句的執(zhí)行次數(shù)
INVALIDATIONS: 語(yǔ)句的cursor失效次數(shù)
LOADS: 語(yǔ)句載入(載出)數(shù)量
ROWS_PROCESSED: 語(yǔ)句返回的列總數(shù)
select b.username,a.DISK_READS,a.EXECUTIONS,a.DISK_READS/decode(a.EXECUTIONS,0,1,a.EXECUTIONS) rds_exec_ratio,a.SQL_TEXT
from v$sqlarea a ,dba_users b
where a.PARSING_USER_ID=b.user_id and a.DISK_READS100 order by a.DISK_READS desc;
2.2 在V$SQL中選出最占用資源的查詢
與V$SQLAREA類似
select * from
(select sql_text,rank() over (order by buffer_gets desc) as rank_buffers,to_char(100*ratio_to_report(buffer_gets) over (),'999.99') pct_bufgets from v$sql)
where rank_buffers 11
2.3 確定何時(shí)使用索引
2 當(dāng)查詢條件只需要返回很少的行(受限列)時(shí),則需要建立索引,不同的版本中這個(gè)返回要求不同
V5:20% V7:7% V8i,V9i:4% V10g: 5%
查看表上的索引
select a.table_name,a.index_name,a.column_name,a.column_position,a.table_owner
from dba_ind_columns a
where a.table_owner='CLOUDSEA'
2 修正差的索引,可使用提示來(lái)限制很差的索引,如INDEX,F(xiàn)ULL提示
2 在SELECT 和WHERE中的列使用索引
如: select name from tbl where no=?
建立索引:create index test on tbl(name,no) tablespace cloudsea_index storage(….)
對(duì)于系統(tǒng)中很關(guān)鍵的查詢,可以考慮建立此類連接索引
2 在一個(gè)表中有多個(gè)索引時(shí)可能出現(xiàn)麻煩,使用提示INDEX指定使用索引
2 使用索引合并,使用提示INDEX_JOIN
2 基于函數(shù)索引,由于使用了函數(shù)造成查詢很慢.必須基于成本的優(yōu)化模式,參數(shù):
QUERY_REWRITE_ENALED=TRUE
QUERY_REWRITE_INTEGRITY=TRUSTED (OR ENFORCED)
create index test on sum(test);
2.4 在內(nèi)存中緩存表
將常用的相對(duì)小的表緩存到內(nèi)存中,但注意會(huì)影響到嵌套循環(huán)連接上的驅(qū)動(dòng)表
alter table tablename cache;
2.5 使用EXISTS 與嵌套子查詢 代替IN
SELECT …FROM EMP WHERE DEPT_NO NOT IN (SELECT DEPT_NO FROM DEPT WHERE DEPT_CAT=’A’);
(方法一: 高效)
SELECT ….FROM EMP A,DEPT B WHERE A.DEPT_NO = B.DEPT(+) AND B.DEPT_NO IS NULL AND B.DEPT_CAT(+) = ‘A’
(方法二: 最高效)
SELECT ….FROM EMP E WHERE NOT EXISTS (SELECT ‘X’ FROM DEPT D WHERE D.DEPT_NO = E.DEPT_NO AND DEPT_CAT = ‘A’);
四、 使用STATSPACK和AWR報(bào)表調(diào)整等待和閂鎖
1. 10GR2里的腳本
在$ORACLE_HOME/RDBMS/ADMIN下
Spcreate.sql 通過(guò)調(diào)用spcusr.sql spctab.sql 和spcpkg.sql創(chuàng)建STATSPACK環(huán)境,使用SYSDBA運(yùn)行它
Spdrop.sql 調(diào)用sptab.sql和spdusr.sql刪除整個(gè)STATSPACK環(huán)境,使用SYSDBA運(yùn)行它
Spreport.sql 這是生成報(bào)表的主要腳本,由PERFSTAT用戶運(yùn)行
Sprepins.sql 為指定的數(shù)據(jù)庫(kù)和實(shí)例生成實(shí)例報(bào)表
Sprepsql.sql 為指定的SQL散列值生成SQL報(bào)表
Sprsqins.sql 為指定的數(shù)據(jù)庫(kù)和實(shí)例生成SQL報(bào)表
Spauto.sql 使用DBMS_JOB自動(dòng)進(jìn)行統(tǒng)計(jì)數(shù)據(jù)收集(照相)
Sprepcon.sql 配置SQLPLUS變量來(lái)設(shè)置像閾值這樣的內(nèi)容的配置文件
Spurge.sql 刪除給定數(shù)據(jù)庫(kù)實(shí)例一定范圍內(nèi)的快照ID,不刪除基線快照
Sptrunc.sql 截短STATSPACK表里所有性能數(shù)據(jù)
五、 執(zhí)行快速系統(tǒng)檢查1. 緩沖區(qū)命中率
查詢緩沖區(qū)命中率
select (1 - (sum(decode(name, 'physical reads',value,0)) /
(sum(decode(name, 'db block gets',value,0)) +
sum(decode(name, 'consistent gets',value,0))))) * 100 "Hit Ratio"
from v$sysstat;
你最好買一本專門講ORACLE性能優(yōu)化的書(shū),好好看看\x0d\x0a1、調(diào)整數(shù)據(jù)庫(kù)服務(wù)器的性能\x0d\x0aOracle數(shù)據(jù)庫(kù)服務(wù)器是整個(gè)系統(tǒng)的核心,它的性能高低直接影響整個(gè)系統(tǒng)的性能,為了調(diào)整Oracle數(shù)據(jù)庫(kù)服務(wù)器的性能,主要從以下幾個(gè)方面考慮: \x0d\x0a1.1、調(diào)整操作系統(tǒng)以適合Oracle數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行\(zhòng)x0d\x0aOracle數(shù)據(jù)庫(kù)服務(wù)器很大程度上依賴于運(yùn)行服務(wù)器的操作系統(tǒng),如果操作系統(tǒng)不能提供最好性能,那么無(wú)論如何調(diào)整,Oracle數(shù)據(jù)庫(kù)服務(wù)器也無(wú)法發(fā)揮其應(yīng)有的性能。 \x0d\x0a1.1.1、為Oracle數(shù)據(jù)庫(kù)服務(wù)器規(guī)劃系統(tǒng)資源 \x0d\x0a據(jù)已有計(jì)算機(jī)可用資源, 規(guī)劃分配給Oracle服務(wù)器資源原則是:盡可能使Oracle服務(wù)器使用資源最大化,特別在Client/Server中盡量讓服務(wù)器上所有資源都來(lái)運(yùn)行Oracle服務(wù)。 \x0d\x0a1.1.2、調(diào)整計(jì)算機(jī)系統(tǒng)中的內(nèi)存配置 \x0d\x0a多數(shù)操作系統(tǒng)都用虛存來(lái)模擬計(jì)算機(jī)上更大的內(nèi)存,它實(shí)際上是硬盤上的一定的磁盤空間。當(dāng)實(shí)際的內(nèi)存空間不能滿足應(yīng)用軟件的要求時(shí),操作系統(tǒng)就將用這部分的磁盤空間對(duì)內(nèi)存中的信息進(jìn)行頁(yè)面替換,這將引起大量的磁盤I/O操作,使整個(gè)服務(wù)器的性能下降。為了避免過(guò)多地使用虛存,應(yīng)加大計(jì)算機(jī)的內(nèi)存。 \x0d\x0a1.1.3、為Oracle數(shù)據(jù)庫(kù)服務(wù)器設(shè)置操作系統(tǒng)進(jìn)程優(yōu)先級(jí) \x0d\x0a不要在操作系統(tǒng)中調(diào)整Oracle進(jìn)程的優(yōu)先級(jí),因?yàn)樵贠racle數(shù)據(jù)庫(kù)系統(tǒng)中,所有的后臺(tái)和前臺(tái)數(shù)據(jù)庫(kù)服務(wù)器進(jìn)程執(zhí)行的是同等重要的工作,需要同等的優(yōu)先級(jí)。所以在安裝時(shí),讓所有的數(shù)據(jù)庫(kù)服務(wù)器進(jìn)程都使用缺省的優(yōu)先級(jí)運(yùn)行。 \x0d\x0a1.2、調(diào)整內(nèi)存分配\x0d\x0aOracle數(shù)據(jù)庫(kù)服務(wù)器保留3個(gè)基本的內(nèi)存高速緩存,分別對(duì)應(yīng)3種不同類型的數(shù)據(jù):庫(kù)高速緩存,字典高速緩存和緩沖區(qū)高速緩存。庫(kù)高速緩存和字典高速緩存一起構(gòu)成共享池,共享池再加上緩沖區(qū)高速緩存便構(gòu)成了系統(tǒng)全程區(qū)(SGA)。SGA是對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行快速訪問(wèn)的一個(gè)系統(tǒng)全程區(qū),若SGA本身需要頻繁地進(jìn)行釋放、分配,則不能達(dá)到快速訪問(wèn)數(shù)據(jù)的目的,因此應(yīng)把SGA放在主存中,不要放在虛擬內(nèi)存中。內(nèi)存的調(diào)整主要是指調(diào)整組成SGA的內(nèi)存結(jié)構(gòu)的大小來(lái)提高系統(tǒng)性能,由于Oracle數(shù)據(jù)庫(kù)服務(wù)器的內(nèi)存結(jié)構(gòu)需求與應(yīng)用密切相關(guān),所以內(nèi)存結(jié)構(gòu)的調(diào)整應(yīng)在磁盤I/O調(diào)整之前進(jìn)行。 \x0d\x0a1.2.1、庫(kù)緩沖區(qū)的調(diào)整 \x0d\x0a庫(kù)緩沖區(qū)中包含私用和共享SQL和PL/SQL區(qū),通過(guò)比較庫(kù)緩沖區(qū)的命中率決定它的大小。要調(diào)整庫(kù)緩沖區(qū),必須首先了解該庫(kù)緩沖區(qū)的活動(dòng)情況,庫(kù)緩沖區(qū)的活動(dòng)統(tǒng)計(jì)信息保留在動(dòng)態(tài)性能表v$librarycache數(shù)據(jù)字典中,可通過(guò)查詢?cè)摫韥?lái)了解其活動(dòng)情況,以決定如何調(diào)整。 \x0d\x0a \x0d\x0aSelect sum(pins),sum(reloads) from v$librarycache; \x0d\x0a \x0d\x0aPins列給出SQL語(yǔ)句,PL/SQL塊及被訪問(wèn)對(duì)象定義的總次數(shù);Reloads列給出SQL 和PL/SQL塊的隱式分析或?qū)ο蠖x重裝載時(shí)在庫(kù)程序緩沖區(qū)中發(fā)生的錯(cuò)誤。如果sum(pins)/sum(reloads) ≈0,則庫(kù)緩沖區(qū)的命中率合適;若sum(pins)/sum(reloads)1, 則需調(diào)整初始化參數(shù) shared_pool_size來(lái)重新調(diào)整分配給共享池的內(nèi)存量。 \x0d\x0a1.2.2、數(shù)據(jù)字典緩沖區(qū)的調(diào)整 \x0d\x0a數(shù)據(jù)字典緩沖區(qū)包含了有關(guān)數(shù)據(jù)庫(kù)的結(jié)構(gòu)、用戶、實(shí)體信息。數(shù)據(jù)字典的命中率,對(duì)系統(tǒng)性能影響極大。數(shù)據(jù)字典緩沖區(qū)的使用情況記錄在動(dòng)態(tài)性能表v$librarycache中,可通過(guò)查詢?cè)摫韥?lái)了解其活動(dòng)情況,以決定如何調(diào)整。 \x0d\x0a \x0d\x0aSelect sum(gets),sum(getmisses) from v$rowcache; \x0d\x0a \x0d\x0aGets列是對(duì)相應(yīng)項(xiàng)請(qǐng)求次數(shù)的統(tǒng)計(jì);Getmisses 列是引起緩沖區(qū)出錯(cuò)的數(shù)據(jù)的請(qǐng)求次數(shù)。對(duì)于頻繁訪問(wèn)的數(shù)據(jù)字典緩沖區(qū),sum(getmisses)/sum(gets)10%~15%。若大于此百分?jǐn)?shù),則應(yīng)考慮增加數(shù)據(jù)字典緩沖區(qū)的容量,即需調(diào)整初始化參數(shù)shared_pool_size來(lái)重新調(diào)整分配給共享池的內(nèi)存量。 \x0d\x0a1.2.3、緩沖區(qū)高速緩存的調(diào)整 \x0d\x0a用戶進(jìn)程所存取的所有數(shù)據(jù)都是經(jīng)過(guò)緩沖區(qū)高速緩存來(lái)存取,所以該部分的命中率,對(duì)性能至關(guān)重要。緩沖區(qū)高速緩存的使用情況記錄在動(dòng)態(tài)性能表v$sysstat中,可通過(guò)查詢?cè)摫韥?lái)了解其活動(dòng)情況,以決定如何調(diào)整。 \x0d\x0a \x0d\x0aSelect name,value from v$sysstat where name in ('dbblock gets','consistent gets','physical reads'); \x0d\x0a \x0d\x0adbblock gets和consistent gets的值是請(qǐng)求數(shù)據(jù)緩沖區(qū)中讀的總次數(shù)。physical reads的值是請(qǐng)求數(shù)據(jù)時(shí)引起從盤中讀文件的次數(shù)。從緩沖區(qū)高速緩存中讀的可能性的高低稱為緩沖區(qū)的命中率,計(jì)算公式: \x0d\x0a \x0d\x0aHit Ratio=1-(physical reds/(dbblock gets+consistent gets)) \x0d\x0a \x0d\x0a如果Hit Ratio60%~70%,則應(yīng)增大db_block_buffers的參數(shù)值。db_block_buffers可以調(diào)整分配給緩沖區(qū)高速緩存的內(nèi)存量,即db_block_buffers可設(shè)置分配緩沖區(qū)高速緩存的數(shù)據(jù)塊的個(gè)數(shù)。緩沖區(qū)高速緩存的總字節(jié)數(shù)=db_block_buffers的值*db_block_size的值。db_block_size 的值表示數(shù)據(jù)塊大小的字節(jié)數(shù),可查詢 v$parameter 表: \x0d\x0a \x0d\x0aselect name,value from v$parameter where name='db_block_size'; \x0d\x0a \x0d\x0a在修改了上述數(shù)據(jù)庫(kù)的初始化參數(shù)以后,必須先關(guān)閉數(shù)據(jù)庫(kù),在重新啟動(dòng)數(shù)據(jù)庫(kù)后才能使新的設(shè)置起作用。
1、1、調(diào)整數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)。這一部分在開(kāi)發(fā)信息系統(tǒng)之前完成,程序員需要考慮是否使用ORACLE數(shù)據(jù)庫(kù)的分區(qū)功能,對(duì)于經(jīng)常訪問(wèn)的數(shù)據(jù)庫(kù)表是否需要建立索引等。
2、2、調(diào)整應(yīng)用程序結(jié)構(gòu)設(shè)計(jì)。這一部分也是在開(kāi)發(fā)信息系統(tǒng)之前完成,程序員在這一步需要考慮應(yīng)用程序使用什么樣的體系結(jié)構(gòu),是使用傳統(tǒng)的Client/Server兩層體系結(jié)構(gòu),還是使用Browser/Web/Database的三層體系結(jié)構(gòu)。不同的應(yīng)用程序體系結(jié)構(gòu)要求的數(shù)據(jù)庫(kù)資源是不同的。
3、3、調(diào)整數(shù)據(jù)庫(kù)SQL語(yǔ)句。應(yīng)用程序的執(zhí)行最終將歸結(jié)為數(shù)據(jù)庫(kù)中的SQL語(yǔ)句執(zhí)行,因此SQL語(yǔ)句的執(zhí)行效率最終決定了ORACLE數(shù)據(jù)庫(kù)的性能。ORACLE公司推薦使用ORACLE語(yǔ)句優(yōu)化器(Oracle Optimizer)和行鎖管理器(row-level manager)來(lái)調(diào)整優(yōu)化SQL語(yǔ)句。
4、4、調(diào)整服務(wù)器內(nèi)存分配。內(nèi)存分配是在信息系統(tǒng)運(yùn)行過(guò)程中優(yōu)化配置的,數(shù)據(jù)庫(kù)管理員可以根據(jù)數(shù)據(jù)庫(kù)運(yùn)行狀況調(diào)整數(shù)據(jù)庫(kù)系統(tǒng)全局區(qū)(SGA區(qū))的數(shù)據(jù)緩沖區(qū)、日志緩沖區(qū)和共享池的大小;還可以調(diào)整程序全局區(qū)(PGA區(qū))的大小。需要注意的是,SGA區(qū)不是越大越好,SGA區(qū)過(guò)大會(huì)占用操作系統(tǒng)使用的內(nèi)存而引起虛擬內(nèi)存的頁(yè)面交換,這樣反而會(huì)降低系統(tǒng)。
5、5、調(diào)整硬盤I/O,這一步是在信息系統(tǒng)開(kāi)發(fā)之前完成的。數(shù)據(jù)庫(kù)管理員可以將組成同一個(gè)表空間的數(shù)據(jù)文件放在不同的硬盤上,做到硬盤之間I/O負(fù)載均衡。
6、6、調(diào)整操作系統(tǒng)參數(shù),例如:運(yùn)行在UNIX操作系統(tǒng)上的ORACLE數(shù)據(jù)庫(kù),可以調(diào)整UNIX數(shù)據(jù)緩沖池的大小,每個(gè)進(jìn)程所能使用的內(nèi)存大小等參數(shù)。
實(shí)際上,上述數(shù)據(jù)庫(kù)優(yōu)化措施之間是相互聯(lián)系的。ORACLE數(shù)據(jù)庫(kù)性能惡化表現(xiàn)基本上都是用戶響應(yīng)時(shí)間比較長(zhǎng),需要用戶長(zhǎng)時(shí)間的等待。但性能惡化的原因卻是多種多樣的,有時(shí)是多個(gè)因素共同造成了性能惡化的結(jié)果,這就需要數(shù)據(jù)庫(kù)管理員有比較全面的計(jì)算機(jī)知識(shí),能夠敏感地察覺(jué)到影響數(shù)據(jù)庫(kù)性能的主要原因所在。另外,良好的數(shù)據(jù)庫(kù)管理工具對(duì)于優(yōu)化數(shù)據(jù)庫(kù)性能也是很重要的。
網(wǎng)頁(yè)標(biāo)題:怎么優(yōu)化oracle內(nèi)存 oracle性能調(diào)整與優(yōu)化
轉(zhuǎn)載來(lái)于:http://chinadenli.net/article20/hepdjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、品牌網(wǎng)站設(shè)計(jì)、建站公司、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站營(yíng)銷、App開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
網(wǎng)頁(yè)設(shè)計(jì)公司知識(shí)