Oracle性能優(yōu)化之Rollback Segment優(yōu)化
1、概念
Transaction以輪循的方式使用rollback segment里的extent,當(dāng)前所在的extent滿時(shí)就移動(dòng)到下一個(gè)extent。可能有多個(gè)transaction同時(shí)向同一個(gè)extent寫數(shù)據(jù),但一個(gè)rollback segment block中只能保存一個(gè)transaction的數(shù)據(jù)。
Oracle 在每個(gè)Rollback segment header中保存了一個(gè)transaction table,包括了每個(gè)rollback segment中包含的事務(wù)信息,rollback segment header的活動(dòng)控制了向rollbak segment寫入被修改的數(shù)據(jù)。rollback segment header是經(jīng)常被修改的數(shù)據(jù)庫塊,因此它應(yīng)該被長時(shí)間留在buffer cache中,為了避免在transaction table產(chǎn)生競(jìng)爭(zhēng)導(dǎo)致性能下降,應(yīng)有多個(gè)rollback segment或應(yīng)盡量使用oracle server 自動(dòng)管理的rollback segment。
2、診斷rollback segment header的競(jìng)爭(zhēng)
如果rollback segment 由手工管理,下列措施診斷rollback segment header的競(jìng)爭(zhēng)
SELECT class,count FROM v$waitstat WHERE class LIKE '%undo%' ;
SELECT Sum(Value) sum FROM v$sysstat WHERE NAME IN ('db block gets','consistent gets');
任何類型的等待次數(shù)(count)與總請(qǐng)求數(shù)(sum)的比率,不能超過1%。或select sum(waits)*100/sum(gets) "Ratio", sum(waits) "Waits", sum(gets) "Gets" from v$rollstat;
waits的匯總數(shù)與gets的匯總數(shù)的比率應(yīng)低于1%,如果超過1%,應(yīng)創(chuàng)建更多的rollback segment。
下列字段數(shù)值如果大于0,則表明在rollback segment header上存在競(jìng)爭(zhēng):
A、v$rollstat 中的waits
B、v$waitstat中的undo header行
C、v$system_event中的undo segment tx slot事件
3、消耗更少的rollback segment
1)如果是刪除表里所有的數(shù)據(jù),盡可能使用trauncate而不是delete。
2)在應(yīng)用中允許用戶有規(guī)律的提交,盡可能不用長事務(wù)。
3)• Import– Set COMMIT = Y– Size the set of rows with BUFFER• Export: Set CONSISTENT=N• SQL*Loader: Set the COMMIT intervals with ROWS
4、小回滾段可能出現(xiàn)的問題
A、事務(wù)由于缺少回滾空間失敗
B、由于下列原因?qū)е碌?ldquo;Snapshot too old問題:
Block里的事務(wù)列表被刷新,block里的SCN比列表Interested Transaction List(ITL)里起始事務(wù)的SCN更新;
Rollback segment header里的Transaction slot被重用;
回滾數(shù)據(jù)已經(jīng)被重寫;
5、9i的自動(dòng)回滾管理
Undo_managment指定了回滾空間的管理方式:Auto:自動(dòng)管理;Manual:手工管理回滾段。
Undo_retention指定了回滾數(shù)據(jù)的保留期限;
Undo_tablespace指定了被使用的回滾表空間;
Oracle自動(dòng)管理的表空間可以在常見數(shù)據(jù)庫的時(shí)候創(chuàng)建,也可以單獨(dú)建立。回滾表空間可以相互轉(zhuǎn)換(switch),但在某一時(shí)刻只能有一個(gè)回滾表空間處于活動(dòng)狀態(tài)。回滾表空間處于非活動(dòng)狀態(tài)時(shí)可以刪除,如果有對(duì)處于被刪除回滾表空間里的已提交事務(wù)的查詢時(shí),oracle會(huì)返回一個(gè)錯(cuò)誤。
估計(jì)undo tablespace大小的公式:
Undo space = (undo_retention * (undo blocks per second * db_block_size)) + db_block_size;
可以使用下列的sql設(shè)定undo_retention和undo tablespace:
select (rd*(ups*overhead)+overhead) "bytes" from (select value rd from v$parameter where name ='undo_retention'),(select (sum(undoblks)/sum(((end_time-begin_time)*10800))) ups from v$undostat),(select value overhead from v$parameter where name='db_block_size');
其中:
Rd:undo_retention設(shè)置的時(shí)間;
Ups:undo blocks per second;
Overhead:rollback segment header;
相關(guān)文章:
1. 經(jīng)驗(yàn)之談:使用Oracle的TDE特性加密2. Oracle 體系結(jié)構(gòu)介紹3. Oracle常用腳本備忘4. 中間件市場(chǎng)競(jìng)爭(zhēng)激烈,Oracle、Redhat分道揚(yáng)鑣?5. 從MySQL到ORACLE程序遷移的注意事項(xiàng)6. Oracle數(shù)據(jù)庫字符集問題解析 zz7. oracle中用Create Table創(chuàng)建表時(shí),Storage中參數(shù)的含義!8. Chapter1:Oracle 10g Oracle DAB [Oracle? Database 2 Day DBA9. 經(jīng)典Oracle圖書推薦-之三10. 經(jīng)典的Oracle圖書推薦-之二
