oracle實(shí)驗(yàn)-體系結(jié)構(gòu)_第1頁(yè)
oracle實(shí)驗(yàn)-體系結(jié)構(gòu)_第2頁(yè)
oracle實(shí)驗(yàn)-體系結(jié)構(gòu)_第3頁(yè)
oracle實(shí)驗(yàn)-體系結(jié)構(gòu)_第4頁(yè)
oracle實(shí)驗(yàn)-體系結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

ORACLE體系結(jié)構(gòu)Oracle體系結(jié)構(gòu)—提交(commit)探討Updatetsetobject_id=92whereobject_id=29如果執(zhí)行完這條命令,你們可以在數(shù)據(jù)庫(kù)中查詢到object_id=29被改變?yōu)?2了嗎?答:如果還是發(fā)起更新語(yǔ)句的本SESSION做的查詢,是可以查到變化的。一條更新語(yǔ)句,無(wú)論插入、修改還是刪除,最終執(zhí)行完畢后都需要執(zhí)行COMMIT或ROLLBACK的確認(rèn)。COMMIT表示用戶確認(rèn)無(wú)誤了,確實(shí)需要更新,ROLLBACK后者表示后悔了,需要撤銷剛才操作。當(dāng)用戶發(fā)起提交命令后,數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)一定會(huì)立即被DBWR進(jìn)程寫(xiě)進(jìn)磁盤(pán)嗎?到底COMMIT之后的內(nèi)存數(shù)據(jù)是否會(huì)立即寫(xiě)入磁盤(pán)?答:也許會(huì),也許不會(huì),不一定數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)每提交一次就刷出一次和積累到一定量后成批刷出,哪個(gè)性能更高?答:批量!你去銀行存款,簽字確認(rèn)等辦理完手續(xù)后,你離開(kāi)銀行,由于你簽字確認(rèn)了,所以銀行工作人員執(zhí)行了COMMIT命令。如果COMMIT之后的數(shù)據(jù)不立刻刷寫(xiě)到磁盤(pán)上,還是存放在SGA中,不幸事情發(fā)生了,銀行突然斷電,內(nèi)存數(shù)據(jù)丟失了!,你在回去路上不放心,到ATM機(jī)器查詢,發(fā)現(xiàn)金額沒(méi)變......從這個(gè)角度看,COMMIT之后的內(nèi)存數(shù)據(jù)應(yīng)該立即寫(xiě)入磁盤(pán),否則有斷電數(shù)據(jù)丟失的風(fēng)險(xiǎn)!

答:COMMIT無(wú)法左右何時(shí)從數(shù)據(jù)緩沖區(qū)刷入磁盤(pán),Oracle根據(jù)一定的規(guī)則來(lái)促成這個(gè)動(dòng)作,就是緩沖區(qū)的數(shù)據(jù)積累到一定的程度,再批量刷入到磁盤(pán)中。既然是批量刷寫(xiě)磁盤(pán),那Oracle如何保證數(shù)據(jù)緩沖區(qū)數(shù)據(jù)斷電不丟失呢?答:Oracle有日志緩沖和日志文件。每次COMMIT時(shí),日志緩沖區(qū)就會(huì)把要操作的動(dòng)作寫(xiě)到磁盤(pán)的日志文件里。這樣,Oracle就不一定非要將數(shù)據(jù)從數(shù)據(jù)緩沖區(qū)寫(xiě)到磁盤(pán)了。磁盤(pán)的日志文件不是內(nèi)存中的日志緩沖區(qū),是永久保存不怕斷電的,斷電后可以依據(jù)磁盤(pán)里的日志文件重新操作一次,把剛才數(shù)據(jù)緩沖區(qū)丟失的數(shù)據(jù)恢復(fù)。所以,數(shù)據(jù)緩沖區(qū)是可以批量刷出的,兼顧了效率和安全既然批量刷出,既高效又安全,那是否批量越大越好?答:在數(shù)據(jù)庫(kù)運(yùn)行過(guò)程中,批量刷出的數(shù)據(jù)占數(shù)據(jù)緩沖區(qū)的比例越大,效率一般來(lái)說(shuō)越高,而且也不用擔(dān)心斷電后的恢復(fù)問(wèn)題。但是,如果批量刷出的數(shù)據(jù)占數(shù)據(jù)緩沖區(qū)的比例很大,那斷電后數(shù)據(jù)庫(kù)重啟的恢復(fù)數(shù)據(jù)動(dòng)作必然需要更長(zhǎng),等待的時(shí)間也就更長(zhǎng)。

因此這是一個(gè)平衡的問(wèn)題:批量刷出的量比較小,Oracle性能就會(huì)降低,但是斷電開(kāi)機(jī)恢復(fù)的時(shí)間就更短;反之批量刷出的量比較大,Oracle性能更高了,但斷電開(kāi)機(jī)恢復(fù)的時(shí)間更長(zhǎng)。由誰(shuí)來(lái)負(fù)責(zé)觸發(fā)DBWR將緩沖區(qū)數(shù)據(jù)刷寫(xiě)到磁盤(pán)?答:CKPT進(jìn)程,什么時(shí)候?qū)?shù)據(jù)緩沖區(qū)數(shù)據(jù)寫(xiě)到磁盤(pán)的動(dòng)作正是由進(jìn)程CKPT來(lái)觸發(fā)的,CKPT觸發(fā)DBWT寫(xiě)出。Updatetsetobject_id=92whereobject_id=29語(yǔ)句執(zhí)行完畢后,如果一直不提交,最終會(huì)從數(shù)據(jù)緩沖區(qū)刷進(jìn)磁盤(pán)嗎?答:會(huì)的,因?yàn)镈BWR將數(shù)據(jù)緩沖區(qū)數(shù)據(jù)寫(xiě)到磁盤(pán),不是由COMMIT決定的,而是由CKPT進(jìn)程決定的。在CKPT的觸發(fā)或者命令下,DBWR將數(shù)據(jù)緩沖區(qū)數(shù)據(jù)寫(xiě)到磁盤(pán),但是如果LGWR出現(xiàn)故障,DBWR此時(shí)還是會(huì)不聽(tīng)CKPT的命令,因?yàn)镺racle在將數(shù)據(jù)緩沖區(qū)數(shù)據(jù)寫(xiě)到磁盤(pán)前,會(huì)先將日志緩沖區(qū)寫(xiě)入日志文件,并耐心地等待其先完成,才會(huì)去完成內(nèi)存刷到磁盤(pán)的動(dòng)作,這就是凡事有記錄Oracle體系結(jié)構(gòu)應(yīng)用舉例假如某數(shù)據(jù)庫(kù)是一個(gè)很大的數(shù)據(jù)庫(kù),數(shù)據(jù)量龐大,訪問(wèn)量非常高,而共享池卻非常小,那會(huì)怎么樣?答:如共享池很快被撐滿了,緩存的東西要不斷地被擠出,結(jié)果很多SQL都難以避免硬解析,因?yàn)楹芸毂粩D出共享池消失地?zé)o影無(wú)蹤,所以數(shù)據(jù)庫(kù)開(kāi)始運(yùn)行緩慢。怎么辦?加大共享池!,若是自動(dòng)管理模式,就是加大SGA的大小某主機(jī)共有內(nèi)存4G,而運(yùn)行在其平臺(tái)上的數(shù)據(jù)庫(kù)是一個(gè)幾乎沒(méi)有什么訪問(wèn)量的小數(shù)據(jù)庫(kù),可能100M的共享池就足夠了,卻被開(kāi)辟了3G的SGA內(nèi)存,500M的PGA內(nèi)存。但是由于操作系統(tǒng)內(nèi)存不足,導(dǎo)致主機(jī)運(yùn)行緩慢,從而導(dǎo)致數(shù)據(jù)庫(kù)運(yùn)行緩慢,該如何做?答:減少SGA大小!如果由于數(shù)據(jù)緩存區(qū)過(guò)小導(dǎo)致大量數(shù)據(jù)量的數(shù)據(jù)庫(kù)產(chǎn)生大量的物理讀,該怎么辦?在SGA自動(dòng)管理的情況下,加大SGA的大小。如果一個(gè)尺寸很大的排序由于內(nèi)存無(wú)法裝下,要在磁盤(pán)中進(jìn)行,而OS卻閑置著大量的內(nèi)存未使用,該如何做?答:增加PGA大小,爭(zhēng)取容納下排序的尺寸,從而避免物理排序!假如一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)存在大量的更新操作,產(chǎn)生了大量的日志需要從REDOBUFFER中寫(xiě)出到日志文件里,結(jié)果日志寫(xiě)滿后切換到下一個(gè)日志文件的頻率不斷加快,由于日志頻繁切換,更新一直在停停走走,我們?cè)撊绾无k?原因分析:切換過(guò)程中,數(shù)據(jù)庫(kù)需要等待切換完成才可以正常運(yùn)作,切換沒(méi)完成,LGWR就無(wú)法把REDOBUFFER的日志繼續(xù)寫(xiě)出來(lái),而數(shù)據(jù)庫(kù)中REDOBUFFER產(chǎn)生的記錄總是先于數(shù)據(jù)緩沖區(qū)產(chǎn)生的,這是串行的順序。此時(shí),數(shù)據(jù)庫(kù)更新的動(dòng)作就根本不可能成功,一定要等待日志切換成功,才能繼續(xù)工作。解決方法:加大日志組文件的尺寸,文件越大,越經(jīng)得住寫(xiě)!Oracle關(guān)鍵的后臺(tái)進(jìn)程PMON(ProcessesMonitor):進(jìn)程監(jiān)視器。如果在執(zhí)行某些更新語(yǔ)句,未提交時(shí)進(jìn)程崩潰了,這時(shí)PMON會(huì)自動(dòng)回滾該操作,無(wú)須人工去執(zhí)行ROLLBACK命令。SMON(SystemMonitor):系統(tǒng)監(jiān)視器。與PMON不同的是,SMON關(guān)注的是系統(tǒng)級(jí)的操作而非單個(gè)進(jìn)程,重點(diǎn)工作在于instancerecovery,除此之外,還有清理臨時(shí)表空間、清理回滾段表空間、合并空閑空間等等。LCKn僅使用于RAC數(shù)據(jù)庫(kù),最多可由10個(gè)進(jìn)程(LCK0,LCK1,...,LCK9),用于實(shí)例間的封鎖。RECO(DistributedDatabaseRecovery):用于分布式數(shù)據(jù)庫(kù)的恢復(fù),適用于兩階段提交的場(chǎng)景。CKPT:用于觸發(fā)DBWR從數(shù)據(jù)緩沖區(qū)中寫(xiě)出數(shù)據(jù)到磁盤(pán)。CKPT執(zhí)行越頻繁,DBWR寫(xiě)出越頻繁,DBWR寫(xiě)出越頻繁越不能顯示批量特性,性能就越低,但數(shù)據(jù)庫(kù)異?;謴?fù)的時(shí)候會(huì)越迅速。DBWR:是Oracle最核心的進(jìn)程之一,負(fù)責(zé)把數(shù)據(jù)從數(shù)據(jù)緩沖區(qū)寫(xiě)到磁盤(pán)里,該進(jìn)程與CKPT相輔相成,也和LGWR密切相關(guān),因?yàn)镈BWR想將數(shù)據(jù)緩沖區(qū)數(shù)據(jù)寫(xiě)到磁盤(pán)的時(shí)候,必須通知LGWR先完成日志緩沖區(qū)寫(xiě)到磁盤(pán)的動(dòng)作后,方可開(kāi)工。LGWR:把日志緩沖區(qū)的數(shù)據(jù)從內(nèi)存寫(xiě)到磁盤(pán)的REDO文件里,完成數(shù)據(jù)庫(kù)對(duì)象創(chuàng)建、更新數(shù)據(jù)等操作過(guò)程的記錄。REDO文件非同小可,可以用來(lái)做數(shù)據(jù)庫(kù)的異?;謴?fù),所以,要保護(hù)好了這些REDO文件和后續(xù)對(duì)應(yīng)的歸檔文件。LGWR一定要按照順序記錄日志,但是多進(jìn)程難以保證順序,因此LGWR只能采用單進(jìn)程。LGWR會(huì)在5種情況下運(yùn)行:每隔3秒鐘,LGWR運(yùn)行一次;任何COMMIT觸發(fā)LGWR運(yùn)行一次;DBWR要把數(shù)據(jù)從數(shù)據(jù)緩沖區(qū)寫(xiě)到磁盤(pán),觸發(fā)LGWR運(yùn)行一次;日志緩沖區(qū)滿三分之一或記錄滿1MB;聯(lián)機(jī)日志文件切換也將觸發(fā)LGWRARCH:它的作用是在LGWR寫(xiě)日志到需要覆蓋重寫(xiě)的時(shí)候,觸發(fā)ARCH進(jìn)程去轉(zhuǎn)移日志文件,復(fù)制出去形成歸檔日志文件,以免丟失。Oracle性能優(yōu)化構(gòu)造環(huán)境:通過(guò)執(zhí)行上述SQL語(yǔ)句,保證t表已經(jīng)存在,且清空共享池第二次優(yōu)化,綁定變量第三次,靜態(tài)改寫(xiě)executeimmediate是一種動(dòng)態(tài)SQL的寫(xiě)法,常用于表名、字段名是變量、入?yún)⒌那闆r,由于表名未知,不能直接寫(xiě)SQL語(yǔ)句,所以要靠動(dòng)態(tài)SQL語(yǔ)句根據(jù)傳入的表名參數(shù),來(lái)拼成一條SQL語(yǔ)句,由executeimmediate調(diào)用執(zhí)行。但本例中,insertintotvalues(i)表名已知,顯然是多此一舉。優(yōu)化原理

proc3實(shí)現(xiàn)了綁定變量,而且動(dòng)態(tài)SQL的特點(diǎn)是執(zhí)行過(guò)程中再解析,而靜態(tài)SQL是編譯的過(guò)程就解析好了。分析第四優(yōu)化,批量提交在proc3中,每插入1條記錄,就執(zhí)行一次commit語(yǔ)句,而每次commit執(zhí)行會(huì)做3件事:(1)觸發(fā)LGWR將REDOBUFFER寫(xiě)出到日志文件中;(2)并且將回滾段的活動(dòng)事務(wù)標(biāo)記為不活動(dòng);(3)同時(shí)讓回滾段中記錄對(duì)應(yīng)前鏡像記錄的所在位置標(biāo)記為可以重寫(xiě)。所以commit的開(kāi)銷并不大,單次提交可能需要0.001秒。另外不管多大批量操作后的提交,也是做這3件事,所花費(fèi)的總時(shí)間不可能超過(guò)1秒。優(yōu)化原理第五優(yōu)化,集合寫(xiě)法

把原先的執(zhí)行100萬(wàn)條SQL語(yǔ)句變成了一條SQL語(yǔ)句,一條一

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論