Oracle原理學習筆記_第1頁
Oracle原理學習筆記_第2頁
Oracle原理學習筆記_第3頁
Oracle原理學習筆記_第4頁
Oracle原理學習筆記_第5頁
已閱讀5頁,還剩74頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 HYPERLINK /Database/ShowArticle.asp?SID=42&ID=1221 ORACLE的工作機制體系結構實例Oracle 運行的時候候,在內存中中會要開辟一一個區間,這這個區間主要要是用于從磁磁盤(數據文文件)中讀出出數據后的一一個在內存的的緩存和處理理。而處理這這些數據的操操作,需要有有一些系統的的后臺進程,這這些進行在OOraclee數據庫啟動動的時候,就就開始運行,一一直在響應前前臺的操作。實際上,這這一個區間(SSGA)和這這些后臺進程程合在一起,就就稱為 實例例。實例是包包括SGA區區和后臺進程程兩個部分的的。 數據庫啟動執行行若干動作,經經歷三個階段段

2、,分別是未未加載、加載載和打開。1、未加載(nnomounnt)可以把數據據庫啟動的這這一階段看作作是Oraccle實例的的啟動。這種種方式啟動下下可執行:重建控控制文件、重重建數據庫。這一啟動命命令: 讀取數據庫庫參數文件。 啟動所需的的后臺進程并并按參數文件件中的定義分分配內存。 將進展情況況寫入告警日日志文件中。2、加載(moount)在實例啟動動加載階段,數數據庫參數文文件中指定的的控制文件被被讀取。記住住控制文件將將數據庫各部部分聯系在一一起。實例從從控制文件中中找到下列信信息,然后將將進展寫入告告警日志文件件。這種方式式啟動下可執執行:數據庫庫日志歸檔、數據庫恢復復、重新命名名一些

3、數據庫庫文件: 所有數據文文件和重做日日志文件的名名稱和位置。 數據庫名。 最新系統更更改號(S C N)。3、打開(oppen)包含在數據據庫中的每個個聯機數據文文件在數據庫庫打開前必須須被同步。在在數據庫打開開階段: 所有聯機數數據文件的頭頭與控制文件件信息相比較較。 所有文件同同步后,數據據庫打開。當數據庫關閉時時,取決于它它的關閉方式式執行不同的的任務:正常(norrmal)在在所有的用戶戶離線后發生生的正常關閉閉。事務(traansacttionall)事務關閉閉就是當所有有的用戶執行行完當前的事事務后,將用用戶從數據庫庫上清除。立即(immmediatte)立即關關閉就是從數數據庫

4、清除所所有當前用戶戶之后,回退退所有未完成成的操作。異常(aboort)異常常關閉沒有給給數據庫任何何整理的機會會。這種方式式關閉后需要要實行崩潰恢恢復。實例是數據管理理的核心它做所有的的工作,而數數據庫存儲所所有的數據。其他啟動方式:startuup resstrictt 約束方式啟動這種方式能夠啟啟動數據庫,但但只允許具有有一定特權的的用戶訪問 非特權用戶訪問問時,會出現現以下提示: ERROR: ORA-001035: ORACCLE 只允允許具有 RRESTRIICTED SESSIION 權限限的用戶使用用 startuup forrce 強制啟動方式 當不能關閉數據據庫時,可以以用

5、starrtup fforce來來完成數據庫庫的關閉 先關閉數據庫,再再執行正常啟啟動數據庫命命令 startuup pfiile=參數數文件名 帶初始化參數文文件的啟動方方式 先讀取參數文件件,再按參數數文件中的設設置啟動數據據庫 startuup EXCCLUSIVVE*一個Delette操作的流流程:檢查語法、語義義(V$ROWWCACHEE :data dictiionaryy cachhe),計算HASSH VALLUE,在ssessioon的UGA中進行匹匹配(sesssion_cached_ccursorrs),如果UGA中沒有有,在libbrary chachhe 中匹配配(l

6、ibrrary cchachee lockk latcch 保護 libraary chhache lock 對對地址堆的訪訪問,而后 libraary chhache pin llatch 保護 liibraryy cachhe pinn 對librrary ccache中中sql相關關信息的訪問問)根據執行計劃讀讀取數據:ccache buffeer chaain laatch 保保護能定位到到buffeer heaader 并并 pin 住該該塊(如果沒有bbufferr headder,就 pin 住某個空塊塊(沒有空塊塊就產生 ffree bbufferr waitts),并到數據據

7、文件中讀取取)。如果此此時有某個進進程想訪問該該塊,將產生生 bufffer buusy waaits 。在redo llogbufffer中記記錄deleete操作的的細節。(包包括回滾段前后鏡鏡像、數據塊塊前后鏡像)。在相應回滾段段段頭的事務表表中創建一個個undo條條目,把將要刪除除的記錄創建建前鏡像,存放放到UndooBlockk中。在Bufferr Cachhe中的相應應數據塊上刪刪除記錄,并并且標記相應應的數據塊為為Dirtyy。提交(COMMMIT)1.Oraclle產生一個個SCN2.在回滾段事事務表中標記記該事務狀態態為commmited33.LGWRR Flussh Log

8、g Bufffer到日志志文件3.如如果此時數據據塊仍然在BBufferr Cachhe中,那么么SCN將被被記錄到Bllock HHeaderr上,這被稱稱為快速提交交(fastt commmit)4.如果dirrtybloock已經被被寫回到磁盤盤,那么下一一個訪問這個個blockk的進程將會會自回滾段中中獲取該事務務的狀態,確確認該事務被被提交。然后后這個進程獲獲得提交SCCN并寫回到到BlockkHeadeer上。這被被稱為延遲塊塊清除(deelayedd blocck cleeanoutt)。內存SGA(系統全全局區、共享享全局區)、PGA(進進程全局區、私有全局區區)內存分配原則:

9、10%冗余內存存,OS SSYS進程(約約1.6G),OS BBUFFERR(約0.8GG),數據庫連連接消耗內存(每個連連接約58M),PGA(每每個連接約22M,V$PGAA_TARGGET_ADDVICE),SGASGAv$sgasttat注意 showw paraameterr sga_max_ssizeOracle的的內存:軟件代碼區系統全局區進程全局區:包包含單個進程程的數據和控控制信息排序區System Global AreaFixed SizeVariable SizeDatabase BuffersRedo buffersLarge poolShared PoolLibrar

10、y cacheData dictionary cacheUser Global Area共享SQL區專用SQL區db_cache_sizedb_keep_cache_sizedb_recycle_cache_sizedb_nk_cache_size永久性內存結構Java poolSGA中的Thhe fixxed arrea包含了了數千個原子子變量,以及及如指向SGGA中其它區區域的poiinterss(指針)等等小的數據結結構.通過對對fixedd tablle內表X$KSMFSSV查詢(如如下)可以獲獲得這些變量量的名字,變變量類型,大大小和在內存存中的地址.the varriablee a

11、reaa是由larrge poool和shhared pool組組成Shared pool中中永久性的內內存包含各種種數據結構如:the bbufferr headders, proceesses, sesssions, trannsactiion arrrays, the enqueeue reesourcces , lockss, thee onliine roollbacck seggment arrayys, vaariouss arraays foor reccordinng staatistiics.其中中大部分的SSIZE是依依靠初始參數數的設置來確確定的.這些些初始參數只只能在

12、實例被被關閉的狀態態下才能夠進進行修改.所所以這里說的的永久性是針針對實例打開開狀態下的生生存期而言.Thevariiable area的的在SGA中中的SIZEES就等于LLARGE_POOL_SIZE,SHAREED_POOOL_SIZZE和永久性性的內存arrrays的的SIZE三三者相加.永久性內存arrrays的的SIZE=the vvariabble arrea - (LARGGE_POOOL_SIZZE+SHAARED_PPOOL_SSIZE).數據緩沖區命中中率v$syssstat這里命中率的的計算應該是是令 x = physiical rreads direcct + pph

13、ysiccal reeads ddirectt (lobb)命中率 =1100 - ( phyysicall readds - xx) / (consiistentt getss + dbb blocck getts - xx)*1000通常如果發現現命中率低于于90%,則則應該調整應應用可可以考考慮是否增大大數據緩沖區區共享池的命中率率SQL sselectt sum(pinhiits-reeloadss)/summ(pinss)*1000 hitt radiio frrom v$libraarycacche;hit raadio99.假如共享池的的命中率低于于95%,就就要考慮調整整應用(

14、通常常是沒使用bbind vvar )或或者增加內存存關于排序部分SQL sselectt namee,valuue froom v$ssysstaat wheere naame liike %sort%;NAME VVALUE sorts (memoory) 667935sorts (diskk) 1sorts (rowss) 70770假如我們發現現sortss (dissk)/ (sortss (memmory)+ sortts (diisk)的的比例過高,則則通常意味著著sort_area_size 部分內存較較小,可考慮慮調整相應的的參數。關于log_bbufferrSQL ssel

15、ectt namee,valuue froom v$ssysstaat2 wherre namme in(redoo entrries,redoo bufffer alllocattion rretriees);NAME VVALUE redo eentriees redo bbufferr alloocatioon rettries 10假如 reddo bufffer aallocaation retriies/ rredo eentriees 的比例例超過1%我我們就可以考考慮增大loog_bufffer HYPERLINK /archives/2005/11/oracle_howto_

16、make_sga_17g.html 如何在Linuux上擴展SSGA超過11.7G共享池(SHAARED_PPOOL_SSIZE)v$shareed_poool_advviceALTER SSYSTEMM FLUSSH SHAARED_PPOOLHow to Keep Objeccts - 重重點使用DBMS_SHAREED_POOOL.KEEEP過程來kkeep oobjectts, UNNKEEP過過程從shaared ppool中移移走pinnned obbjectssexecutee dbmss_sharred_poool.keeep(aaddresss,hassh_vallue);

17、keeep 該匿名名塊共享池包括庫高高速緩存( libraary caache)、數據字典典高速緩存和和服務器控制制結構(例如如數據庫字符符集)。Orracle服服務器用庫高高速緩存來提提高執行SQQL語句的性性能;庫高速速緩存包括共共享和專用SSQL區。共共享SQL區區包括SQLL語句語法分分析樹和執行行路徑,而專專用SQL區區存儲特定的的會話信息,例例如捆綁變量量、環境和會會話參數、運運行堆棧和緩緩沖區等。Soft paarse使用用的資源包括括CPU 和和libraary caache llatch getsHard paarse是指指要解析的SSQL沒有在在libraary caach

18、e中,或或者執行的時時候發現解析析過的SQLL已經ageed outt,就是離開開了librrary ccache,稱稱為Librrary ccache missees使用的的資源包括額額外的CPUU, libbrary cachee latcch getts, 以及及shareed poool lattch geets.專用SQL區在在每個事務初初始化時創建建,在與專用用SQL區相相關的游標關關閉時被釋放放。一個用戶戶會話能夠一一次打開的專專用SQL區區的數量由iinit.oora參數OOPEN_CCURSORRS決定。使使用這兩個結結構,Oraacle服務務器能夠重用用一條SQLL語句的所

19、有有執行的共同同信息。與此此同時,可以以從專用SQQL區中查詢詢執行的特定定會話信息。注意游標使用過過程中并不關關閉游標的應應用會繼續為為應用分配越越來越多的內內存,部分原原因是為每個個打開的游標標分配了專用用SQL區。庫高速緩存中的的專用SQLL區可更進一一步分為永久久區和運行區區。共享池的大小取取決于iniit.oraa文件參數SSHAREDD_POOLL_SIZEE,它是以字字節為單位的的。你必須將將這個值設得得足夠大,以以確保有足夠夠的可用空間間來裝載和存存儲PL/SSQL塊和SSQL語句。共享區經過過長期裝卸和和卸載數據對對象會產生許許多碎片,如如果在共享池池中沒有足夠夠的連續空間間

20、用來裝載目目標數據,會會產生錯誤。解決這個問問題的捷徑是是運行SQLL命令ALTTER SYYSTEM FLUSHH SHARRED_POOOL。但是是如果在數據據庫操作時,經經常遇到共享享池錯誤,你你必須增大共共享池Librarry cacche包含含 sharred SQQL andd PL/SSQL arreas(PPL/SQLL包括Proocedurres,Functiions,PPackagges,Trriggerr,匿名PLL/SQL塊) Sizing the LLibrarry Cacche定義storeed objject(ppackagges,viiews等等等)的內存需求求

21、;定義經常使使用的sqll stattementt的所需內存存1. 初始時將將SHAREED_POOOL_SIZZE設得很大大,運行應用程程序2. 計算sttored objecct所占的內內存SSELECTT SUM(sharaable_mmem) FFROM vv$db_oobjectt_cachheWHEERE tyype = PACKKAGE or tyype = PACKKAGE BBODY or tyype = FUNCCTION or ttype = PROOCEDURRE;3. 應用程序序運行一段時時間后,估計常用ssql語句所所占的內存(不包括動態態SQL)SSELECTT

22、SUM(sharaable_mmem)FFROM vv$sqlaareaWWHERE execuutionss 5;4. 對每個uuser每個個打開的cuursor,需要2500bytess,可在運行高高峰期間使用用查詢:SSELECTT SUM(250 * userrs_opeening) FROMM v$sqqlareaa;5. 在測試環環境中,可讓一個用用戶打開一定定數量的cuursor,運行下列語語句測試共享享內存,然后乘上uuser數SSELECTT 250 * vallue byytes_pper_usserFRROM v$sessttat s, v$sttatnamme nWWH

23、ERE s.staatistiic# = n.staatistiic#ANND n.nname = opeened ccursorrs currrentAND s.sidd = 155;以上內存的和,再加上一點點內存(留給動態SSQL使用),作為你的的應用的理想想內存設置;預留一部分分空間作為大大的內存需要要,避免misss和碎片;一些大的內內存需要: PL/SQQL塊的編譯譯,triggger的編譯譯;小的objeect不會使使預留空間碎碎片化,反而保證rreservved liist有大的的連續塊,一旦從reeserveed lisst中分配的的內存釋放它它就返回reeserveed li

24、sst。影響的參數:SSHAREDD_POOLL_RESEERVED_SIZE初始值=SHHARED_POOL_SIZE*10%, 超過50%,oraclle serrver報錯錯OPEN_CUURSORSS 缺缺省=50定義了涉及分配配給用戶進程程的私有SQQL區域的ccursorrs數量, 一個priivate SQL aarea一直直存在直至ccursorr關閉;為了利用更更多的內存給給共享SQLL區域,需要要提高sesssion每每個sesssion允許許多curssor數量,開發人員應應關閉不需要要的curssor節省內內存CURSOR_SPACEE_FOR_TIME 缺省=FFAL

25、SE 布爾爾值設置TRUE,表示以空間間換取時間,共享SQLL區不會被aaged oout直至相相關的currsor被關關閉,因此確確信有足夠的的內存,沒有有cachee misss;除非RELLOADS in V$LIBRAARYCACCHE一直為為0,否則不不要改變此參參數值若應用為FORRM或使用動動態SQL,設此值為FFALSE - 因因為動態sqql總是不一一致,將占用用過多內存SESSIONN_CACHHED_CUURSORSS 缺省=0 表示沒沒有cachhe當一個sesssion打算算關閉一個ccursorr時,如果這這個curssor的paarse ccount超超過3次,那

26、那么這個cuursor將將會被加到ssessioon currsor ccache list的的MRU端.當一個seessionn打算parrse一個ssql時,它它會先去seessionn的pga內內搜索sesssion cursoor cacche liist,如果果找到那么會會把這個cuursor脫脫離listt,然后當關關閉的時候再再把這個cuursor加加到MRU端端. sesssion_cacheed_currsor提供供了快速軟分分析的功能,提供了比ssoft pparse更更高的性能. 檢查系統是否需需要此參數的的方法:對某個典型用戶戶sessiionselect a.sidd

27、,b.naame,a.valuee fromm v$seesstatt a,v$statnname bb wherre a.sstatisstic#=b.staatistiic#andd (b.nname=sessiion cuursor cachee hitss or b.namme likke paarse ccount%);If few parsees ressult iin hitts,則可提提高此參數,注意它將iincreaase ovveralll demaands oon memmory. ?Data Diictionnary CCacheSelect type,parammet

28、er,gets,getmiisses,roundd(getmmissess/decoode(geets,0,null,gets)*100,2) rratio(%) ffrom vv$rowccache;Goal foor a GGood RRatio SUUM(GETTMISSEES)/SUUM(GETTS) Perfformannce MaanagerrMemmoryData Dictiionaryy Cachhe Hitt%檢索需要在共享享池中要求大大于100KK連續空間的的對象:select *fromm v$dbb_objeect_caachewhhere ssharabble_mee

29、m aand tyype inn (PAACKAGEE, PPACKAGGE BODDY, PROCEEDURE, FUUNCTIOON);考察返回的結果果,確認是否否需要pinn到共享池中中,返回結果果中的KEPPT字段如果果是YES,那那么表示該對對象已經固定定在了共享池池中,為NOO,則表示還還沒有固定。如果需要固定,使使用下面的語語句:exec dbbms_shhared_pool.keep(SYS.STANDDARD); 數據庫默認安裝裝的時候沒有有創建dbmms_shaared_ppool包,所所以需要先創創建該包。cd $ORAACLE_HHOME/rrdbms/adminnsq

30、lpluss “/ aas syssdba”dbmspoool.sqqlDATA BUUFFER 數數據庫緩沖區區高速緩存v$db_caache_aadvicee=一堆數據塊塊(DB_BBLOCK_SIZE*DB_BLLOCK_BBUFFERRS)數據庫的任何修修改都在該緩緩沖里完成(LRULRUWW)。所有的塊,被讀讀到內存中后后,它的塊頭頭(dataa blocck heaader)放放在一個Caache bbufferr chaiin 中,CCache buffeer chaain由多個個雙向hassh 鏈表組組成,hassh鏈表數量量由_db_blockk_hashh_buckkets

31、決定定.每個數據據塊頭由DBBA(datta bloock adddresss)作為keey,經haash函數后后放在鏈表上上,它和bllock bbufferr中的bloock一一對對應,數據塊塊頭不包括實實際的數據,僅是一個簡簡單的描述. 后臺進程程掃描hassh鏈表前,必須獲得ccache buffeer chaain laatch,如如果在Cacche Buuffer chainn中找不某塊塊,就由磁盤盤讀入. 若若需要查找某某個 bloock,則根根據 bloock的信息息能計算 hhash vvalue 然后迅速定定位到 haash taable,然然后根據haash taable

32、 信信息去查看是是否存在所想想要的 buuffer ,若有則命命中,若沒有有則不命中。顯然不可能能根據lisst去逐個搜搜索,這樣效效率太低.LRU 就是一一種盡可能將將常用的數據據保留在內存存的算法.當數據庫需需要一個數據據緩沖區, 他會從數據據庫緩沖區的的LRU 隊列列的尾部找一一個空閑的緩緩沖, 將一個數數據塊讀入, 然后數據據庫會把這個個緩沖區放到到LRU 隊列列的中部, 如果該緩沖沖被其他程序序用到的話, 那么他會會往隊列的頭頭上移動, 如果這個緩緩沖沒有被其其他程序用到到,并且沒有被被修改過, 那么他會慢慢慢的移動到到LRU 隊列列的尾部, 最終被認為為是空緩沖區區被其他數據據塊所

33、覆蓋.一旦這個緩緩沖區被修改改過DBWRR 把他從LRUU 隊列中移移出, 放到LRUWW 隊列 (也叫贓緩緩沖區) 中, 等待DBWRR 把他們批批量寫入數據據文件, 然后再把把他們的緩沖沖區連接到LLRU 隊列列的尾部.周而復始的的工作.如果查找在一個個閥值內沒有有結果或者造造成dirtty緩沖區已已經溢出,在進一步查查找freee bufffer前系統統將發出一個個消息給DBBWR讓他可可以將LRUUW隊列的緩緩沖區寫入磁磁盤. 這個閥值值被叫做這個個閥值被叫做做DBWR scan depthhdirtyy緩沖區大小小可以用 _DB_LAARGE_DDIRTY_QUEUEE和 2*_DD

34、B_BLOOCK_WRRITE_BBATCH 來確定. 前臺進程程繼續搜索ffree bbufferr.直到 _DBB_BLOCCK_MAXX_SCANN_CNT還還沒有發現系系統就會掛起起該進程.記錄dirtty bufffers inspeected的的靜態變量并并把該進程標標志為freee bufffer wwait.cache 和和 bufffer_poool_keeep是不一一樣的,cachee 是如果對對該表全表掃掃描的話,會會把塊放在mmru端 ,bbufferr_pooll_keepp是放在 kkeep池中中select tablee_namee,cachhe,bufffer_

35、ppool ffrom ddba_taables wheree tablle_namme=TEEST;將表和索引 CCache 到 SGAA 中從ORACLEE805之后后,支持ALLTER TTABLE tablee_namee STORRAGE(BBUFFERR_POOLL KEEPP)命令了。但是在8005與8i中中,需要設置置buffeer_poool_keeep參數來設設置KEEPP池大小。這這塊內存來自自數據緩存區區,也就是從從db_bllock_bbufferrs中分配。在ORACCLE8和88i中,還必必須設置dbb_blocck_lruu_latcches參數數。該參數應應該

36、比2*33*CPU數數量少,但是是要大于1,否否則無法設置置buffeer_poool_keeep。在ORRACLE99i 中則需需要設置DBB_KEEPP_CACHHE_SIZZE來設置KKEEP池內內存的大小。這樣將表KKEEP才有有用。而且KKEEP池要要能夠容納得得下才行的將函數Cachhe 到 SSGA 中$ORACLLE_HOMMErdbbmsaddminddbmspoool.sqql;exec dbbms_shhared_pool.keep(procceduree_namee,P);重做日志緩沖區區(LOG_BUFFEER)log bufffer分成成內部的buuffer blo

37、ckks,而這些些blockk各有8個字字節的頭部信信息存在于vvariabble arrea中.當重做日志緩沖沖區填滿時,將將它的內容寫寫入聯機重做做日志文件。是循環使用用。是數據庫庫最活躍的情情形,可以用用V$SYSSSTAT視視圖進行監控控。查詢V$SYSSTTAT視圖vvalue域域,它表明用用戶進程等待待重做日志緩緩沖區所花費費的時間(此此處valuue的值應接接近于0,否否則應增大初初始化參數文文件的Logg_bufffers的值值):SELECT NAME, VALUUE FROOM V$SSYSSTAAT WHEERE NAAME = redoo log spacee requ

38、uests;PGAv$pgasttatv$ppga_taarget_advicce后臺進程v$bgproocess數據庫寫進程程(DBWRR)(DB_BLOOCK_WRRITE_BBATCH,DB_BLLOCK_MMAX_SCCAN,DBB_WRITTES,DBB_BLOCCK_LRUU_LATCCHES,DDB_BLOOCK_CHHECKPOOINT_BBATCH,DB_BLLOCK_CCHECKSSUM)負責數據文件的的讀寫和dbb_dataa_bufffer的清理理dbwr負責搜搜集dirtty bufffer,sslavess負責寫磁盤盤工作的前提條件件:1. dirtty bufff

39、er超出出了dirtty bufffer llist的tthreshhold.22. serrver pprocesss在bufffercaache中查查找freee bufffer時,則則也可能會通通知DBWnn將dirtty bufffer寫入入dataffile.33. DBWWn每3秒會會檢查是否有有dirtyy數據要寫入入dataffile.44.CKPTT5.tabblespaace offflinee或tabllespaccebegiin bacckup(這這里實際上是是由CKPTT引起).66.dropp objeect7. shutddown (這里實際上上也是由CKKPT引

40、起)建議你使用與存存儲數據文件件的物理磁盤盤一樣多的DDBWR進程程;DBWR寫入數數據文件的任任何修改已經經被記錄在重重做日志文件件中.一次checkkpointt的成功過程程是:dbwr搜集dirtty bufffer,交給slave寫寫磁盤,寫完完畢通知dbbwr,然后后dbwr才返返回檢查點完完成。增加寫進程,同同時要調整ddb_bloock_lrru_lattches參參數,如修改或添添加如下兩個個參數: db_wwriterr_proccessess=4 db_bllock_llru_laatchess=8日志寫進程(LLGWR)。LOG_CHHECKPOOINT_IINTERVV

41、AL,LOOG_CHEECKPOIINT_TIIMEOUTT,LOG_CHECKKPOINTTS_TO_ALERTTLGWR工作的的主要條件如如下1.用戶提交2.有1/3重重做日志緩沖沖區未被寫入入磁盤3.有大于1MM重做日志緩緩沖區未被寫寫入磁盤4.超時5.DBWR需需要寫入的數數據的SCNN號大于LGWWR記錄的SCNN號,DBWRR觸發LGWRR寫入歸檔進程(AARCH)。ARCHIVVE_LOGG_STARRT檢查點(CKKPT)。同步數據文件,日志文件和和控制文件CKPT會更新新數據文件/控制文件的的頭信息.CKPT工作的的主要條件如如下1.在日志切換換的時候2.數據庫用iimmed

42、iiate,ttransaactionn,normmal選項shuttdown數數據庫的時候候3.根據初始話話文件LOGG_CHECCKPOINNT_INTTERVALL、LOG_CCHECKPPOINT_TIMEOOUT,FAAST_STTART_IIO_TARRGET的設設置的數值來來確定4.用戶觸發系統監控和進進程監控進程程(SMONN和PMONN)。調度進程(DDnnn)。MTS_DIISPATCCHERS恢復進程(RRECO)。DISTRIIBUTEDD_TRANNSACTIIONS快照進程(SSNPn)。OB_QUEEUE_PRROCESSS,JOB_QUEUEE_INTEERVA

43、L鎖進程(LCCKn)。并行查詢進程程(Pnnnn)。PARALLLEL_MIIN_SERRVERS,PARALLLEL_MMAX_SEERVERSS用戶和服務器器進程(Snnnn)。回滾v$rollsstatv$waitsstatv$syssttatx$bbhdba_rollbback_ssegs一下事務的流程程:1.分配一個回回滾段2.在在回滾段事務務表中分配一一個事務槽33.分配unndo bllock4.更新數據塊塊上的ITLL事務槽5.把前鏡像記記錄在unddo bloock內6.更改數據塊塊的內容ITL事務槽Inteeresteed Traansacttion LList(IITL

44、)ITL內容包括括:xidTTransaactionn IDUbaUUndo BBlock AddreessLckLLock SStatussxid=Unddo.Seggment.Numbeer+Traansacttion.TTable.Slot.Numbeer+Wraapuba=Adddress.Of.Laast.Unndo.Bllock.UUsed+SSequennce+Laast.Enntry.iin.UNDDO.Reccord.MMapALTER SSYSTEMM SET UNDO_MANAGGEMENTT=MANUUAL SCCOPE=SSPFILEE;SET TRAANSACTTI

45、ON UUSE ROOLLBACCK SEGGMENT RB_LAARGE1;當一個事務開始始的時候,會首先把變變化前的數據據和變化后的的數據先寫入入日志緩沖區區,然后把變化化前的數據寫寫入回滾段,最后才在數數據緩沖區中中修改數據一致性讀取coonsisttent rreads假設查詢開始的的時候的SCCN 為T,則在查詢詢所掃描的數數據塊中,如如果數據的CCOMMITT SCN 小于T,則查詢接接受該數據,如如果COMMMIT SCCN 大于T 或者說還還沒有產生CCOMMITT SCN,則則查詢會嘗試試去回滾段中中查找數據。這是為了保保證數據的讀讀取的時間點點的一致性,所所以叫一致性性讀。

46、我們可以參考vv$rolllstat、v$traansacttion和x$bh 表,在x$bbh 中的classs字段,如如果是回滾段段塊,假設回回滾段USNN 為n,則回滾段段頭classs 為11+2nn,回滾段塊塊為12+22n。回滾段的使用、擴展、回縮縮同一個事務不能能跨越回滾段段;一個回滾滾段至少包含含2個extennt。每個回回滾段有一個個回滾段頭,回回滾段頭是一一個blocck,里面主主要記錄了事事務表信息。當產生一個個事務的時候候,就在回滾滾段頭的事務務表中記錄一一條信息,該該信息中包含含了事務標志志、事務狀態態、使用的回回滾段塊數等等等信息。使使用時從第一一個exteent的

47、第二二個blocck到最后一一個exteent循環使使用;如果其其中的一個eextentt有未提交的的事物,那么么前面的exxtent不不能跨越該eextentt,只能在22個exteent之間擴擴展新的exxtent,并并修改相應的的節點指針(回回滾段的exxtent 之間是通過過指針連起來來的一個單向向循環的鏈表表結構);系統回滾段與延延遲回滾段SYSTEM 回滾段是創創建在系統表表空間中,主主要是用于系系統級的事務務和分配普通通事務于其他他回滾段上。當手工創建建數據庫后需需要創建普通通回滾段之前前必須首先創創建系統回滾滾段。系統回滾段主要要用于兩個方方面。一是系系統事務,比比如針對數據據

48、字典的操作作的trunncatettable 和 dropp tablle 。如果果trunccate ttable or drrop taable 的的過程中沒有有成功,則系系統會根據系系統回滾段中中的數據字典典操作信息對對該DDL 操作進行回回退。另一個個方面,就是是延遲回滾段段(Defeerred Rollbback SSegmennt) 。表表空間offfline時時用戶申請回回滾,數據庫庫會將回滾信信息寫入系統統回滾段(就就是延遲回滾滾段),等到到onlinne時,在寫寫入表空間。回滾段的設置和和管理init.orra: ttransaactionns_perr_rolllback_

49、segmeent 和transsactioons,max_rrollbaack_seegmentts1:系統并發事事務數有多少少?(主要是是產生恢復信信息的會話數數+一部分冗冗余數(200)=總回滾滾段數)2:系統是否存存在大查詢或或者大是事務務?頻繁么?3:能提供給系系統的回滾段段表空間的磁磁盤空間是多多少?不要將回滾段的的MAXEXXTENTSS設為UNLLIMITEED, 回滾滾段所在表空空間也不要設設為AUTOOEXTENND方式, 否則將會使使得由于某個個不正常的事事務導致整個個數據庫處于于失控狀態。9iundo_reetentiion 表示示在自動管理理模式下,回回滾段中的數數據在

50、被覆蓋蓋前保留多長長的時間,單單位是秒。這這個參數應該該決定于系統統所中一些大大查詢運行的的時間長度,以以避免ORAA-015555 錯誤。在9i 下創建建非自動管理理的的回滾段而而不使用UNNDO 表空空間,則設置置undo_managgementt為MANUAAL,然后在在系統表空間間中創建一個個回滾段(注意這是必必須的),創建自己己的回滾段表表空間,這時時可以在回滾滾段表空間中中創建回滾段段,創建完畢畢刪除系統表表空間中的回回滾段。著名的ORA-015555 問題一致讀獲取的時時候發現回滾滾段已經被覆覆蓋而出現找找不著變化前前映像,也就就是當COMMMIT SSCN 大于于T 查詢嘗試試

51、去回滾段中中找回數據卻卻發現回滾段段已經被覆蓋蓋了(因為回回滾段是循環環使用的),則則會出現著名名的ORA-015555 錯誤。重做v$syssttatv$llogv$llogfillev$loog_hisstoryalter ssystemm swittch loogfilee;重做記錄了塊的的改變,包括括回滾段頭塊塊、回滾段塊塊、數據塊,并并且在塊改變變之前先記錄錄重做信息。更改矢量(chhange vectoor)當要改變數數據庫的數據據時,這些改改變的細節被被記錄為更改改矢量。通過過這些記錄,數數據庫處理過過程可以被重重現。簡而言之,一個個更改矢量就就是記錄了一一個數據塊的行槽從一個狀

52、狀態改變到另另一個狀態的的過程。也就是redoo的記錄單位位是entrry,即:ffile XX,blocck Y,rrow sllot Z。Redo也記錄錄了數據塊(ttable blockk & inndex bblock)前前照,其實記記錄的就是uundo,因因為即使沒有有commiit,改動也也會被記錄到到redo 文件里,這這時的tabble bllock & indeex bloock就是未未提交的最新新狀態,如果果此時系統崩崩潰,則需要要redo中中記錄的unndo(前照照)進行恢復復,所以reedo記錄了了數據塊、索引塊、回滾塊 。ORACLE推推薦logsswitchh時間最

53、好在在15-330分鐘之間間。跟redoloogfilee有關的其它它數據庫參數數1、log_bbufferr它最好不要要大于5122K或者1228K*CPPU個數。我們可以用下面面的SQL語語句檢測loog_bufffer使用用情況:SELECT RBAR.NAME,RBAR.VALUEE,RE.NNAME,RRE.VALLUE,(RRBAR.VVALUE * 1000) / RRE.VALLUE | % radiioFROOM V$SSYSSTAAT RBAAR, V$SYSSTTAT REE WHERRE RBAAR.NAMME = redo buffeer alllocatiion r

54、eetriess ANDD RE.NNAME = reddo enttries;這個比率小于11%才好,否否則增加loog_bufffer的大大小2、log_ccheckppoint_interrvalOracle88.1版本后后log_ccheckppoint_interrval指的的是兩次chheckpooint之間間操作系統數數據塊的個數數。checckpoinnt時Oraacle把內內存里修改過過的數據塊用用DBWR寫寫到物理文件件,用LGWWR寫到日志志和控制文件件。從性能優化來說說log_ccheckppoint_interrval=rredoloogfileesizebyytes

55、/5512byttes3、log_ccheckppoint_timeooutOracle88.1版本后后log_ccheckppoint_timeoout指的是是兩次cheeckpoiint之間時時間秒數。OOraclee建議不用這這個參數來控控制,因為事事務(traansacttion)大大小不是按時時間等量分布布的。用loog_cheeckpoiint_inntervaal參數控制制會好一些。禁用此參數數或者按默認認的900。alter ssystemm archhive llog cuurrentt;第二個存檔日志志目的地可以以通過初始化化參數LOGG_ARCHHEVE_DDUPLEXX

56、_DESTT設定。LOGG_ARCHHEVE_DDEST和LOG_AARCHEVVE_DUPPLEX_DDEST都可可以存檔所有有的聯機重作作日志文件。另一個初始始化參數LOOG_ARCCHIVE_MIN_SSUCCEEED_DESST如果設置置了的話,可可以決定一個個重作日志組組必須被成功功存檔到的存存檔日志目的的地數,在一一個目的地滿滿或其介質有有錯時,該參參數可以防止止Oraclle被凍結。要確保這兩兩個目的地被被配置在兩個個分離的磁盤盤/控制器上,避避免I/O沖突對數據據庫性能的影影響。一些參數v$parammeter查看系統當前使使用的所有參參數SET paggesizee 9000

57、0 SET heaad OFFF SET terrm OFFF SELECT DECODDE(isddefaullt, TTRUE, # ) | DECODDE(isddefaullt, TTRUE, RPADD(namee,43), RPADD(namee,45) | = | vaalue FFROM vv$paraameterr ORDEER BY name;查看所有參數是是否已被innit.orra重新設定定SELECT name, issppecifiied FRROM v$obsollete_pparameeter ;查看過時參數和和強調參數SELECT ksppoonm,DEECO

58、DE(ksppooflg, 1,Obbsolette, 22, Unndersccored)FROMM x$kssppo OORDER BY ksspponmm; 查看當前系統中中的所有隱藏藏參數(以ssys身份登登錄)SELECT ksppiinm, kksppsttvl, kksppdeesc FRROM x$ksppii x, xx$kspppcv y WHEREE x.innst_idd = usserenvv(Insstancee) anndy.innst_idd = usserenvv(Insstancee) anndx.inndx = y.inddx anddx.kspppinm

59、 like %_&ppar%oorder bytraanslatte(x.kksppinnm, _, );用戶參數select * froom v$ffixed_tablee wherre namme likke %NNLS%;SELECT * FROOM V$NNLS_PAARAMETTERS;ALTER SSESSIOON SETT NLS_DATE_FORMAAT=YYYYY-MMM-DD HHH24:MMI:SS;最常被修改的參參數:Shared_pool_size分配給共享享池的內存字字節數隨著用用戶的需求,可可以按時增加加此值Rollbacck_seggmentss數據庫啟動動時獲

60、取的一一個或多個當當事務處理量量增加或減少少時,可以從從該回滾段名名列表中增加加或刪除回滾滾段名Processses可同時訪問問數據庫的最最大進程數量量sessionn=1.1*proceess+5,一一般而言,ssessioon和proocess是是一一對應的的,5是Orracle后后臺進程的ssessioon,10%是提供給rrecurssiveseessionn使用的。db_blocck_bufffers見見 HYPERLINK l _SGA SGA介紹中中的相關內容容shared_pool_size見見 HYPERLINK l _SGA SGA介紹中中的相關內容容log_bufffer

溫馨提示

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

評論

0/150

提交評論