閑談重做Oracle日志文件
經(jīng)過(guò)長(zhǎng)時(shí)間學(xué)習(xí)重做Oracle日志文件,于是和大家分享一下,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。在Windows 2000 Server中可以通過(guò)“性能”工具來(lái)監(jiān)控磁盤(pán)的活動(dòng),對(duì)VMS和Unix多數(shù)磁盤(pán)進(jìn)行每秒40次以上的I/O是過(guò)度的,應(yīng)當(dāng)給予調(diào)節(jié)。
分布I/O以解決磁盤(pán)爭(zhēng)用
(1)存放重做Oracle日志文件
重做Oracle日志文件是順序?qū)懭氪疟P(pán)的,所以盡量不要將重做Oracle日志文件跟數(shù)據(jù)文件存放在同一個(gè)磁盤(pán)上。如果不得不將數(shù)據(jù)文件跟重做Oracle日志文件存放在同一個(gè)磁盤(pán)上,那么該盤(pán)空間不應(yīng)該屬于SYSTEM表空間、RBS表空間,以及其它如DATA和INDEX表空間。它們都會(huì)直接導(dǎo)致與重做Oracle日志文件之間的爭(zhēng)用,而且還會(huì)有增加寫(xiě)入日志數(shù)據(jù)庫(kù)讀寫(xiě)速度的可能性。
(2)存放檔案日志文件
在進(jìn)行大量數(shù)據(jù)事務(wù)處理的時(shí)候,數(shù)據(jù)庫(kù)選擇歸檔功能將會(huì)導(dǎo)致其與重做日志磁盤(pán)間的爭(zhēng)用。而且當(dāng)檔案重做Oracle日志文件出現(xiàn)空間不夠時(shí),將會(huì)引起數(shù)據(jù)庫(kù)的凍結(jié)。所以檔案日志文件不能與SYSTEM表空間、RBS表空間或INDEX表空間段存儲(chǔ)在同一設(shè)備上,也不能與任何聯(lián)機(jī)重做Oracle日志文件存放在同一設(shè)備上。它只允許與一些小的、靜態(tài)的文件存放到一起。
(3)存放數(shù)據(jù)代碼文件
為了減少數(shù)據(jù)庫(kù)文件和數(shù)據(jù)庫(kù)代碼之間的爭(zhēng)用,應(yīng)避免將數(shù)據(jù)庫(kù)文件作為代碼文件而放在同一磁盤(pán)中。如果數(shù)據(jù)文件不得不放在同一磁盤(pán)設(shè)備中,那么應(yīng)當(dāng)將最不常用的數(shù)據(jù)文件放在那兒。
(4)減少非Oracle文件的I/O
(5)優(yōu)化DBWR進(jìn)程爭(zhēng)用
數(shù)據(jù)庫(kù)寫(xiě)進(jìn)程(DBWR)、日志寫(xiě)進(jìn)程(LGWR)與歸檔進(jìn)程(ARCH)三種后臺(tái)處理進(jìn)程可以空閑存取磁盤(pán)上的數(shù)據(jù)庫(kù)文件。這三個(gè)進(jìn)程之間常因同時(shí)讀寫(xiě)爭(zhēng)用而導(dǎo)致I/O爭(zhēng)用,而DBWR進(jìn)程還有自我爭(zhēng)用發(fā)生的可能。通過(guò)對(duì)DBWR賦值可以有效的解決DBWR的自我爭(zhēng)用問(wèn)題。
通常在操作系統(tǒng)中為每個(gè)實(shí)例創(chuàng)建多個(gè)DBWR進(jìn)程,并通過(guò)初始參數(shù)DB_WRITERS來(lái)確定DBWR的個(gè)數(shù)。建議將賦值在n與2n之間,這里的n是指磁盤(pán)的個(gè)數(shù)。如果賦值不能很好的解決DBWR的內(nèi)部爭(zhēng)用,可以通過(guò)異步I/O來(lái)減少DBWR的內(nèi)部爭(zhēng)用。由于I/O進(jìn)程的執(zhí)行都是并行的,所以異步的I/O僅需一個(gè)DBWR即可解決問(wèn)題。
(6)表數(shù)據(jù)存放策略
將大表的數(shù)據(jù)劃分成若干小部分,并將這些部分存儲(chǔ)在不同磁盤(pán)的不同數(shù)據(jù)文件中。用create tablespace創(chuàng)建表空間,在datafile子句中指定數(shù)據(jù)文件,每個(gè)文件應(yīng)在不同的盤(pán)上。如我們需要在三個(gè)磁盤(pán)上存放數(shù)據(jù)文件,可使用如下代碼:
- create tablespace trip
- datafile 'file_on_disk_1' size 500k,
- 'file_on_disk_2' size 500k,
- 'file_on_disk_3' size 500k;
(7)指定表空間和表大小
用“create table”創(chuàng)建表,在tablespace子句中指定表空間,在storage子句中指定表的大小,如以下SQL語(yǔ)句:
- create table striptab (
- ……
- Tablespace strip 1500k
- Storage (initial 495k next 495k minextent 5 pctincreate 0);
(8)清除其它的磁盤(pán)I/O
數(shù)據(jù)塊空間的分配因數(shù)據(jù)庫(kù)中的數(shù)據(jù)被存放在數(shù)據(jù)塊中,因此如何分配數(shù)據(jù)塊中的空間將直接影響其存取性能。
當(dāng)用update語(yǔ)句更新一行數(shù)據(jù)時(shí),可能使該行的數(shù)據(jù)增加,從而使其在一個(gè)數(shù)據(jù)塊內(nèi)容納不下。這時(shí),Oracle就尋找能容納下該行的數(shù)據(jù)塊,如果能找到這樣的塊,便把該行全部存入新塊中(這稱(chēng)為行移動(dòng))。如果找不到能容納該整行的數(shù)據(jù)塊,則把該行切成若干片,然后把每一片分別存放在一個(gè)數(shù)據(jù)塊中,于是這樣的行被存放在多個(gè)數(shù)據(jù)塊中,這種行稱(chēng)為鏈接行。查詢(xún)一個(gè)鏈接行則需要多次I/O操作,從而產(chǎn)生I/O瓶頸,這將降低數(shù)據(jù)的存取性能。以上介紹重做Oracle日志文件。
【編輯推薦】



















