首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle Rollback Segment效能調優全攻略:從爭用診斷到9i自動管理

     編輯:Oracle 資料庫基礎

Rollback Segment(回滾段)是交易一致性與並發控制核心。本文涵蓋概念、爭用診斷、減少使用量、小回滾段風險、9i自動Undo管理五大維度。

一、核心概念

  • 交易以循環方式使用Extent,滿則移至下一Extent。
  • 多交易可共用同一Extent,但每個Rollback Segment Block僅存單一交易資料。
  • Segment Header含Transaction Table,頻繁修改,應長駐Buffer Cache。
  • 為避免Transaction Table爭用,建議多個Rollback Segment或啟用自動管理。

二、手動管理模式下的爭用診斷

-- 檢查Undo等待統計
SELECT class, count FROM v$waitstat WHERE class LIKE '%undo%';

-- 計算等待率
SELECT SUM(waits)*100/SUM(gets) "Ratio", SUM(waits) "Waits", SUM(gets) "Gets" FROM v$rollstat;

判準:任何等待類型計數/總請求數 > 1%,或v$rollstat.waits、v$waitstat undo header、v$system_event undo segment tx slot大於0,均表示Header爭用,需新增Rollback Segment。

三、減少Rollback Segment消耗策略

  1. 全表刪除用TRUNCATE替代DELETE。
  2. 應用層規律提交,避免長交易。
  3. 工具參數優化:
    • Import:COMMIT=Y、BUFFER設定批次大小
    • Export:CONSISTENT=N
    • SQL*Loader:ROWS設定提交間隔

四、小回滾段引發的兩大風險

  • 交易因缺乏回滾空間失敗(ORA-01555前身)
  • Snapshot too old三大成因:
    1. Block ITL列表刷新,SCN超過起始交易SCN
    2. Rollback Segment Header Transaction Slot被重用
    3. 回滾資料已被覆寫

五、9i自動Undo管理(UAM)

參數說明
UNDO_MANAGEMENTAUTO啟用自動管理,MANUAL手動
UNDO_RETENTION回滾資料保留秒數
UNDO_TABLESPACE指定Undo表空間

Undo表空間可切換,同一時刻僅一個Active。非Active可刪除,但若有查詢引用其中已提交交易會報錯。

Undo表空間大小估算公式

Undo Space = (undo_retention * (undo blocks per second * db_block_size)) + db_block_size

SQL自動計算:

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');

採用UAM可大幅降低DBA管理負擔,建議新系統預設啟用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved