文章詳情頁(yè)
細(xì)化解析:Oracle Online Redo LogFile
瀏覽:107日期:2023-11-26 16:55:37
我們知道Oracle里聯(lián)機(jī)日志文件(Onlineredologfile)循環(huán)記錄了數(shù)據(jù)庫(kù)所有的事務(wù)(transaction)。它的大小、個(gè)數(shù)和存儲(chǔ)位置對(duì)數(shù)據(jù)庫(kù)性能和恢復(fù)也是有重要影響的。一、redologfile的簡(jiǎn)單介紹它一般有大小相同的一組文件構(gòu)成。我們可以查看數(shù)據(jù)庫(kù)視圖v$logfile知道它的個(gè)數(shù)和存儲(chǔ)位置。 SVRMGRL>select*fromv$logfile;查看數(shù)據(jù)庫(kù)視圖v$log知道它當(dāng)前的狀態(tài)。SVRMGRL>select*fromv$log;一個(gè)時(shí)間只有一組logfilegroup是工作狀態(tài)(current),redologfile滿(mǎn)了后會(huì)自動(dòng)切換到下一個(gè)logfilegroup,假如數(shù)據(jù)庫(kù)是歸檔方式同時(shí)寫(xiě)到歸檔日志文件。這些文件不能用常規(guī)的文本編輯器查看,它以特定的格式存放,只有數(shù)據(jù)庫(kù)或者專(zhuān)門(mén)的軟件可以看懂它。 redologfile的最大數(shù)目是在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)指明的。假如你想知道當(dāng)前數(shù)據(jù)庫(kù)redologfile的最大數(shù)值是多少,重新生成控制文件,就可以知道。SVRMGRL>alterdatabasebackupcontrolfiletotrace;這條語(yǔ)句會(huì)在$ORACLE_BASE/admin/dbname/udump/路徑下生成當(dāng)前時(shí)間的一個(gè)*.trc文件,也就是數(shù)據(jù)庫(kù)的控制文件,用文本編輯器,即可看到數(shù)據(jù)庫(kù)創(chuàng)建時(shí)用的一些參數(shù),包括redologfile的最大數(shù)(maxlogfiles),每組最大的成員個(gè)數(shù)(maxlogmembers)。二、redologfile的大小和位置對(duì)數(shù)據(jù)庫(kù)性能的影響假如用ORACLE的安裝向?qū)?chuàng)建的典型數(shù)據(jù)庫(kù),它的redologfile大小為500K,這基本上是不能滿(mǎn)足典型的OLTP應(yīng)用的,在數(shù)據(jù)庫(kù)日志文件(alert_orasid.log)里會(huì)記錄著頻繁的logswitch。ORACLE推薦logswitch時(shí)間最好在15--30分鐘之間,所以redologfile的大小由數(shù)據(jù)庫(kù)DML操作數(shù)據(jù)量的大小決定其最佳大小。redologfile最好有多個(gè)分布在不同硬盤(pán)的存儲(chǔ)位置,多組成員,使數(shù)據(jù)庫(kù)恢復(fù)時(shí)有更多的選擇。典型的OLTP應(yīng)用,redologfile大小可以為16M。當(dāng)然繁忙的數(shù)據(jù)庫(kù),例如當(dāng)今的門(mén)戶(hù)網(wǎng)站,這個(gè)值可以達(dá)到100M以上.假如你發(fā)現(xiàn)當(dāng)前數(shù)據(jù)庫(kù)日志文件里logswitch的時(shí)間偏大或者偏小,不要緊。ORACLE提供了在數(shù)據(jù)庫(kù)聯(lián)機(jī)狀態(tài)來(lái)改變r(jià)edologfile大小的方法。三、在聯(lián)機(jī)狀態(tài)改變r(jià)edologfile大小的方法 假如原來(lái)數(shù)據(jù)庫(kù)有3個(gè)小的redologfile,下面是UNIX環(huán)境下的一個(gè)例子: 第一步:往數(shù)據(jù)庫(kù)添加三個(gè)大的redologfileSVRMGRL>ALTERDATABASEADDLOGFILEGROUP4('/opt/oradata/app/redo04.log','/ora_bak/oradata2/redolog/redo04.log')size16Mreuse;SVRMGRL>ALTERDATABASEADDLOGFILEGROUP5('/opt/oradata/app/redo05.log','/ora_bak/oradata2/redolog/redo05.log')size16Mreuse;SVRMGRL>ALTERDATABASEADDLOGFILEGROUP6('/opt/oradata/app/redo06.log','/ora_bak/oradata2/redolog/redo06.log')size16Mreuse;第二步:手工地做logswitch,使新建的redologfile起作用. SVRMGRL>altersystemswitchlogfile; 此操作可以執(zhí)行一到幾次,使舊的redologfile成invalid狀態(tài)。第三步:刪除原來(lái)舊的redologfile.SVRMGRL>alterdatabasedroplogfilegroup1;SVRMGRL>alterdatabasedroplogfilegroup2;SVRMGRL>alterdatabasedroplogfilegroup3;四、跟redologfile有關(guān)的其它數(shù)據(jù)庫(kù)參數(shù)1、log_buffer log_buffer是ORACLESGA的一部分,所有DML命令修改的數(shù)據(jù)塊先放在log_buffer里,假如滿(mǎn)了或者到了check_point時(shí)候通過(guò)lgwr后臺(tái)進(jìn)程寫(xiě)到redologfile里去。它不能設(shè)得太大,這樣在意外發(fā)生時(shí)會(huì)丟失很多改變過(guò)的數(shù)據(jù)。它最好不要大于512K或者128K*CPU個(gè)數(shù)。 我們可以用下面的SQL語(yǔ)句檢測(cè)log_buffer使用情況:SVRMGRL> selectrbar.name,rbar.value,re.name,re.value,(rbar.value*100)/re.value'%''radio'fromv$sysstatrbar,v$sysstatrewhererbar.name='redobufferallocationretries'andre.name='redoentries';這個(gè)比率小于1%才好,否則增加log_buffer的大小2、log_checkpoint_interval Oracle8.1版本后log_checkpoint_interval指的是兩次checkpoint之間操作系統(tǒng)數(shù)據(jù)塊的個(gè)數(shù)。checkpoint時(shí)Oracle把內(nèi)存里修改過(guò)的數(shù)據(jù)塊用DBWR寫(xiě)到物理文件,用LGWR寫(xiě)到日志和控制文件。 一般UNIX操作系統(tǒng)的數(shù)據(jù)塊為512bytes。從性能優(yōu)化來(lái)說(shuō)log_checkpoint_interval=redologfilesizebytes/512bytes 3、log_checkpoint_timeout Oracle8.1版本后log_checkpoint_timeout指的是兩次checkpoint之間時(shí)間秒數(shù)。Oracle建議不用這個(gè)參數(shù)來(lái)控制,因?yàn)槭聞?wù)(transaction)大小不是按時(shí)間等量分布的。用log_checkpoint_interval參數(shù)控制會(huì)好一些。禁用此參數(shù)或者按默認(rèn)的900。log_checkpoint_timeout=0
標(biāo)簽:
Oracle
數(shù)據(jù)庫(kù)
排行榜
