1.可用的raid級别
raid0
raid1
raid5
raid10 比raid 01好
raid100 這種raid級别優點主要是:改進随機讀的性能和消除熱點
2.更新的raid5
盡管raid5是一種廉價的備援方案,但它對于寫入密集型操作的性能較差。
當對raid 5 陣列發出一個寫入請求時,必須改變磁盤上已修改的塊,從磁盤上讀取'奇偶校驗塊',并且使用已修改的塊來計算新的奇偶校驗塊,然後把資料寫入磁盤上,無論請求寫入的資料量為多少,這個過程都會限制吞吐量,因為對于每一次寫操作,都至少有兩次額外的IO操作。建議在系統進行的是讀取操作或隻讀操作時使用raid 5.
最常見的解決方案是在陣列上實作了一個記憶體緩存,進而加速陣列上所有IO的寫性能。
1.動态緩存管理:一些廠商簡單的将緩存對半劃分------如果1G的緩存,500M用于讀,500M用于寫
2.捆綁的寫操作:可以将多個奇偶校驗操作分組到一次IO操作中。
3.傳統檔案系統的安裝和維護
不要把磁盤陣列上的一個邏輯裝置分割成多個檔案系統。該操作看起來能夠向您提供靈活性,但也會增加必須管理的資料檔案的位置數量。
存儲區域網絡 SAN
網絡附加存儲 NAS
4.在硬體磁盤之間分布關鍵資料檔案
一定要特别注意把關鍵的資料檔案分布到可用的檔案系統裡。例如,經常被通路的表應該相應的索引分開放置在不同的檔案系統上。下面的應盡量分離:
/:系統
/u01:oracle software
/u02:臨時表空間,控制檔案1
/u03:undo段,控制檔案2
/u04:redo logs ,archive logs,控制檔案3
/u05:system和sysaux 表空間
/u06: data1 ,控制檔案4
/u07: redo logs 鏡像 ,index3
/u08: data2
/u09: index2
/u10: data3
/u11: index1
5.分開存儲資料和索引檔案
6.避免IO争用
磁盤争用通常發生在有多個程序試圖同時通路一個實體磁盤的情況下。要監控磁盤争用,可以檢視資料庫控制器中的資料檔案度量。該度兩組包含兩組度量:檔案平均讀取時間和檔案平均寫入時間,度量應用于與資料庫關聯的所有資料檔案。
通過如下查詢來确定檔案IO問題:
col PHYRDS format 999,999,999
col PHYWRTS format 999,999,999
ttitle "Disk Balancing Report"
col READTIM format 999,999,999
col WRITETIM format 999,999,999
col name format a40
spool fiol.out
select name,phyrds,phywrts,readtim,writetim from v$filestat a,v$datafile b
where a.file# = b.file#
order by readtim desc
/
spool off
7.通過移動資料檔案來均衡檔案IO
下面實體上移動一個導緻檔案争用的資料檔案:
1.使資料檔案有關的表空間脫機
alter tablespace orders offline;
2.把資料檔案複制到磁盤的新位置:
3.用新的資料檔案位置為表空間重命名資料檔案
alter database orcl rename file '/disk1/orders1.dbf' TO '/disk2/orders1.dbf';
4.使表空間重新聯機
alter tablespace orders online;
5.删除舊的資料檔案
另一種用于大型的,關鍵檔案的方法如下:
1.将表空間置于read only模式,通過查詢DBA_TABLESPACE确認該狀态
2.在OS級别上複制資料檔案,比較複制操作後的檔案大小以確定具有相同的大小
3.将表空間改為脫機
4.使用alter tablespace 指令重命名資料檔案
5.将表空間改為聯機
6.将表空間改為read write
7.通過查詢v$datafile 确認控制檔案被更新
8.在os級删除舊的資料檔案
8.字典管理的表空間遷移到本地管理的表空間
把字典管理的表空間重建為本地管理的統一區模式:導出表空間中的段,删除并重新創 建表空間,然後再導入段。
在11g/10g 可以使用DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL程式包遷移 system表空間,在執行該操作之前,需要注意以下限制條件:
1.資料庫中所有使用者的預設臨時表空間不能使system表空間
2.必須将計劃進行讀/寫的所有表空間遷移或轉換到本地管理的表空間
3.必須以受限制的模式啟動資料庫
4.除了UNDO,必須把所有打算遷移的表空間置于隻讀模式,或者擁有在本地管理的表 空間中定義的聯機復原段。
9.oracle大檔案表空間
大檔案表空間允許使用者建立隻有一個檔案的表空間,該資料檔案的大小完全地結合了 64位系統的能力。
大容量資料檔案的實作方法是改變表空間中ROWID的管理方式。
在大檔案表空間中隻有一個資料檔案,是以這3個位置被改為用于延長行的資料塊編号 ,進而可以使用比傳統小檔案表空間大很多的ROWID.
10.oracle管理檔案
11.ASM簡介
ASM提供了内置于oracle資料庫核心中的檔案系統和卷管理器功能。
ASM優點:
性能跟裸裝置一樣優秀
從資料庫空間管理的角度來看,是一個簡單而強大的卷管理工具
将IO均勻地分布到所有可用磁盤驅動器以防止産生熱點,并且最大化性能。
不再需要過多進行配置工作,并且最大化存儲資源的利用,進而推動資料庫整合。
ASM與生俱來支援大檔案
在增加或删除存儲容量後執行自動線上重新配置設定。
維護資料的備援副本以提供高可用性,或者利用第三方的RAID的功能
支援oracle database 11g及RAC
11g2的ASM支援将OCR和表決磁盤置于ASM磁盤組之上和叢集檔案系統
可以利用第三方的多路徑技術
内在支援異步IO和直接IO的能力
完全整合進oracle管理檔案,是以在不犧牲性能的情況下降低了複雜度
Exadata隻允許使用ASM
使用者可以使用RMAN COPY指令從檔案系統向ASM磁盤組轉移資料檔案
12.ASM執行個體
ASM執行個體不包含任何實體檔案,比如日志檔案,控制檔案或資料檔案,并且在啟動時隻需要很少的一些初始化參數。
對于具有管理多個資料庫執行個體存儲的ASM執行個體并且需要較高可用性的系統來說,最好是單獨的ORACLE_HOME(ASM_HOME)中安裝ASM 執行個體,而不是在資料庫ORACLE_HOME中進行安裝。
13.ASM和權限
11g中,oracle修改了這個概念并且引入了ASMDBA和SYSASM的角色。這個角色同作業系統中叫做OSASM的組綁定在一起。
14.ASM磁盤
ASM隻能使用字元裝置作為磁盤,而不能使用塊裝置。
但是在linux作業系統上,可以使用ASMlib來通路塊裝置。
在參數檔案裡定義磁盤 *.asm_diskstring=''
15.ASM磁盤組
磁盤組中會隐式地建立ASM檔案系統層。
檔案系統内在具有自動化檔案級資料分條和鏡像功能。在ASM磁盤組中建立的資料檔案将其檔案區均勻地分布到磁盤組中的所有 聯機磁盤,進而提供均勻地IO負載。
這些磁盤必須有如下屬性:
1.目前沒有被另外一個磁盤組使用。
2.必須沒有預先存在ASM頭
3.不能有ORACLE檔案頭
16.新的空間相關列
USABLE_FREE_SPACE:在V$ASM_DISKGROUP中報告的FREE_MB值并沒有把鏡像計算在内。訓示可以"安全"利用的空閑空間數量,同 時将鏡像考慮進來。該列提供了磁盤組中可用空間的更為精彩的視圖。當該值為負數時,磁盤的故障對于系統來說可能是緻命 的,因為這意味着沒有足夠的空閑空間可以忍受磁盤故障。
是以這裡出現的負數并不是一個缺陷,而是一個信号,它訓示磁盤組的故障組需要更多的磁盤空間以容忍可能發生的磁盤故障
REQUIRED_MIRROR_FREE_MB:訓示給定磁盤組中需要多少可用空閑空間才可以在一次或多次磁盤故障後還原備援。這個參數訓示 磁盤組中最少可用的空間數量,以便可以容忍的最糟糕的故障發生後磁盤組可以恢複所有的備援資料。
17.叢集同步服務
ASM需要在使用之前安裝和啟動叢集同步服務CSS。在單個執行個體中CSS維持ASM執行個體和資料庫執行個體之間的同步。CSS是oracle的叢集 就緒服務CRS的一個元件,在每個運作oracle 10g或11g的ASM節點上自動安裝,并且在伺服器啟動時自動啟動。在RAC10g或11g 環境中,每個RAC節點都會安裝完整的oracle叢集件(Clusterware)
在啟動時,ASM将在CSS中注冊自身及其安裝的所有磁盤組。這就使CSS可以在所有RAC節點之間同步磁盤組中繼資料。CSS用于確定 ASM執行個體的健康。
18.資料庫執行個體和ASM
資料庫和ASM之間的通信總是在節點内進行,資料庫不會聯系遠端在RAC中ASM執行個體以服務資料庫請求。
ASM檔案的資料庫檔案級通路(讀/寫)與非ASM存儲類似,不同之處在于任何以"+"開頭的資料庫檔案将使用ASM代碼自動處理。
然而,通過ASM檔案,資料庫檔案通路内在地具有裸裝置的特征,也就是具有核心化異步I/O(KAIO)的非緩沖(直接)I/O
19.使用ASM進行資料庫整合和叢集化
oracle 11GR2 允許每個節點上的一個ASM執行個體管理叢集中的所有資料庫執行個體。
是以,給定節點上的ASM執行個體現在可以同時管理單個執行個體或許多RAC資料庫執行個體的存儲,并且管理一個或多個單執行個體資料庫。
20,ASM存儲管理和配置設定
oracle表示,1M的條帶深度已經被證明是oracle資料庫的最佳條帶深度。
ASM在稱為配置設定單元AU的單元中配置設定空間。ASM總是建立跨越磁盤組中所有磁盤的單個AU區。對于具有類似尺寸磁盤的磁盤組,在每個磁盤上應該有同等數量的AU區。資料檔案被劃分為多個檔案區。存在兩種類型AU區分布:粗粒度分布和細粒度分布。對于粗粒度分布,每個粗粒度的檔案都被映射到單個的配置設定單元。使用細粒度分布時,由8個AU構成一組,每個AU提供128K,交錯形成每個粒度。細粒度分布将大型IO操作切分為可以并行執行的多個128K I/O操作,有助于連續的IO
重做日志檔案和歸檔日志檔案被定義為細粒度,而資料檔案被定義為粗粒度
21.ASM重新平衡和重新分布
重新平衡操作是在每個檔案的基礎上對所有資料庫檔案執行的
ORACLE背景程序RBAL通過ASM執行個體管理這種重新平衡操作
ASM重新平衡操作的典型流程:
1.在ASM執行個體上,DBA添加或删除磁盤組中的磁盤
2.調用RBAL程序以建立重新平衡計劃,然後開始協調重新分布
3.RBAL将計算執行該任務所需的估計時間和工作,然後發送消息給ARBx程序以實際地處理請求,通過ASM_POWER_LIMIT 參數直接确定調用的ARBx程序的數量
4.更新持續操作目錄(中繼資料)以反映重新平衡活動
5.将需要重新配置設定的每個區配置設定給ABRx程序
6.ARBx對這些區執行重新平衡,鎖定,重新配置設定,解鎖每個區,這在V$ASM_OPERATION視圖的OPERATION列中顯示為 REBAL
初始化參數ASM_POWER_LIMITT用于影響重新平衡操作的吞吐量和速度。範圍是0到11 11位全速 1為低速 0為不開啟
如果使用ASM删除或添加多個磁盤,那麼最好一次性添加或删除所有的驅動器。這将減少執行存儲改動所需的重新平衡操作的數 量。
22.使用分區來避免磁盤争用
将分區表的各個分區放在不同的磁盤上,獲得最佳吞吐量的關鍵就是把每個分區放置在不同的實體磁盤上,這樣可以同時通路3 個分區,前提是不使用ASM。
23.其他類型的分區
1.多列範圍分區
create table cust_sales(acct_no number(5),
cust_name char(30),
item_id number(9),
sale_day integer not null,
sale_mth integer not null,
sale_yr integer not null)
partition by range(sale_yr,sale_mth,sale_day)
(partition cust_sales_q1 values less than (2011,04,01) tablespace users
partition cust_sales_q2 values less than (2011,07,01) tablespace users2
partition cust_sales_q3 values less than (2011,10,01) tablespace users
partition cust_sales_q4 values less than (2012,01,01) tablespace users2
partition cust_sales_qx values less than (maxvalue,maxvalue,maxvalue)
tablespace users2);
我們把資料分成4份,這樣就可以隻需檢視一個分區的時候避免通路其他分區,同時我們還可以在不妨礙其他分區的情況下歸檔 其中一個分區中的資料。為了獲得更好地I/O,還可以把資料分到多個表空間中。
2.散列分區(hash分區)
3.組合分區
4.清單分區
24.ORACLE 11gR2的新分區選項
引用分區
區間分區
虛拟列分區
系統分區
1.區間分區
區間分區是對範圍分區一個大的增強,當插入語句正在尋找一個不存在的分區時,它能提供自動預建立分區。區間分區支援下 面類型的組合分區:區間-範圍 區間-清單 區間-哈希
2.引用分區
3.Partitionwise連接配接
oracle也允許隻在兩個分區表需要的分區上進行關聯查詢。
25.使用索引分區
索引包括本地索引和全局索引,有字首索引和無字首索引。本地索引可以被分區;每個片段就是一個本地索引。
初始化參數SKIP_UNUSABLE_INDEXES允許使用者禁用标志位不可用的索引或索引分區的錯誤報告。如果不希望資料庫選擇新的執行計劃以避免使用不可用的段,就應該設定該參數為false
26.導出分區
如果表中的資料被仔細的分段,就可以導出分區中所有的新資訊,該操作隻對某些資料集有效,這些資料集使用一些類型的漸增列值作為分區鍵。
如果根據日期進行分區,那麼所有新的資料将進入最新的分區。
expdp scott/tiger file=dept_d1.dmp tables=(dept.d1) diretory=dpump_dir
27.消除碎片
避免與區管理有關的性能問題:
1.如果知道段将增長到多大尺寸或者按多大比例增長,就使用本地管理的統一區表空間
2.使區尺寸是資料庫塊尺寸的倍數
3.把增長過大的表放在有合适區大小的表空間中
4.通過使用ASSM避免行連結争用
select segment_name,segment_type,extents,bytes from dbs_segment a,dba_tablespaces b where a.extents >1000;
28.使用正确的區大小
在多數情況下,通過ROWID通路時首選,因為ROWID操作不會關心段中究竟有多少區
29.建立新的表空間并把資料移到其中
如果表變得很大,可以建立一個表空間并把資料移到這個新的位置以減少區的數量。在下面的示例中,customer表被分成100個大小的1M的區。可以通過DBA_EXTENTS視圖查詢到該區的資訊:
select segment_name,bytes from dba_extents where segment_name = 'CUSTOMER';
首先建立一個表空間,然後再new_10m_dat表空間中建立一個新的叫做customer1的customer表(該表空間有10M的區)
create table customer1 tablespace new_10m_dat as select * from customer;
drop table cusomer;
rename customer1 to customer;
新的customer表的尺寸現在有10個10M的區。
30.正确設定PCTFREE以避免鍊化現象
ROWID辨別資料在磁盤上的位置。行的ROWID不變,當資料塊沒有足夠空間來儲存一行或該行最近的修改結果時,就會發生鍊化現象。一個鍊化現象行通常存在于多個塊而不是一個塊上。
用于檢測是否碰到鍊化現象的問題,可以執行oracle提供的用于建立CHAINED_ROWS表的utlchain.sql腳本。
analyze table customer
list chained rows;
select head_rowid from chained_rows where table_name = 'CUSTOMER';
如果使用ASSM自動段管理 就不需要設定PCTFREE,自動段管理利用位圖來跟蹤塊中可用于行插入的空閑空間的數量。
31.重建資料庫
1.完成一個全資料庫導出
2.完成一個全映像備份
資料庫檔案
控制檔案
聯機重做日志檔案
init.ora檔案
3.使用create database 指令重建資料庫
4.確定有一個足夠大的復原段和一個足夠大的臨時表空間,用來處理導入資料庫和建立索引。
5.導入整個資料庫
32.增加日志檔案尺寸和LOG_CHECKPOINT_INTERVAL以提高速度
如果想大量的insert update和delete 操作速度更快,可以增加大日志檔案大小,并確定這些檔案在最快的磁盤上。
還可以增加LOG_CHECKPOINT_INTERVAL的值,用以在日志切換前執行一次檢查點,預設為0
LOG_CHECKPOINT_INTERVAL定了檢查點之間的時間長度。因為,任何包含執行線上重做日志的恢複操作都會受到影響。增加線上重做日志大小會增加媒體恢複所需要的時間。
oracle依賴于聯機重做日志來記錄事務。每次資料庫中發生一次事務,聯機重做日志檔案中就會增加一個條目。
修改重做日志檔案大小的時候:
1.當資料庫啟動或将要停機時,日志檔案必須聯機并可用
2.聯機重做日志可以循環使用,聯機重做日志檔案會自動被寫成歸檔日志檔案
3.最少應該有兩個聯機重做日志檔案。為了防止聯機重做日志檔案丢失,推薦使用聯機重做日志檔案多路複用
4.建立資料庫時要指定初始的日志檔案數目和大小
5.重新開機資料庫至MOUNT狀态,可以使用alter database 指令開啟或關閉歸檔日志
6.檢查點發生在将重做日志中已送出的事務寫入到資料庫的時候,檢查點也會更新資料檔案頭以設定用于恢複時滾動後退階段的SCN。如果發生故障時目前資料庫的SCN是2345678,并且資料檔案檢查點的SCN是234500,那麼重做日志中僅僅234500到2345678部分的改變才需要回退。檢查點是資料庫一緻性的基本保證--它告訴我們資料庫在某個點上一切都是一緻的。
33.快速恢複區FRA
許多人傾向于使用較為緩慢的,較為廉價的儲存設備來維護快速恢複區,根據您的實作方式,這可能會為您的環境引入一些潛在的性能問題。oracle建議使用者在另一個磁盤陣列上有用于快速恢複的相等大小的一組磁盤。
1.如果将性能較慢的磁盤用作快速恢複區,重做操作的性能就會受到負面影響,因為所有的重做日志都存儲子在快速恢複區中并且性能最慢的裝置決定。
2.考慮是否需要非常大的快速恢複區,并且找出最适合于您的閃回需求或預算的快速恢複區尺寸
3.當備份和其他活動利用快速恢複區時,大型的快速恢複區會降低寫性能。
4.由于快速恢複區隻頻繁地用于歸檔和閃回資料庫寫入,是以不會帶給磁盤過多的負擔
5.該配置仍然會維護備援的重做區域
34.增加恢複的可能性:在每次批處理後送出
把大的事務隔離到他們自己的復原段上
commit;
set transaction use rollback segment rb_big;
Transaction set.
delete from big_table
set transaction 必須用在commit語句或復原程序之後
根據事務需要,復原段大小可以動态擴充至它所在的表空間耳朵全部可用空間大小。
在復原段上使用OPTIMAL存儲選項可以動态把已擴充的復原段縮小到指定大小。設定OPTIMAL選項,這樣已經擴充的復原段就能回到它的初始大小,同時釋放磁盤空間。
alter rollback segment rb1 storage(optimal 15M);
還可以強制一個復原段收縮到它的OPTIMAL設定或是指定大小
alter rollback segment rb1 shrink;
alter rollback segment rb1 shrink to 15M;
不要依賴這個,因為是以性能為代價的
如果UNDO設定為自動,但沒有設定undo表空間就會使用system(最好不要這樣)
本文轉自潘闊 51CTO部落格,原文連結:http://blog.51cto.com/pankuo/1631328,如需轉載請自行聯系原作者