共計 2383 個字符,預計需要花費 6 分鐘才能閱讀完成。
今天就跟大家聊聊有關(guān)如何評估 undo 表空間大小,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
如何估算 Oracle 數(shù)據(jù)庫所需的 UNDO 表空間的大小:
How To Size UNDO Tablespace For Automatic Undo Management (文檔 ID 262066.1)
要確定 Oracle 需要的 UNDO 表空間的大小,需要以下三條信息:
UR 以秒為單位的 UNDO_RETENTION
UPS 每秒生成的還原數(shù)據(jù)塊的數(shù)量
DBS db_block_size
UndoSpace = [UR * (UPS * DBS)] + (DBS * 24)
UNDO_RETENTION 是一個參數(shù),此參數(shù)控制為提供讀一致性而保留的還原數(shù)據(jù)量,以秒為單位定義,可以在初始化文件中設置,或使用 ALTER SYSTEM 命令來動態(tài)修改。
SQL ALTER SYSTEM SET UNDO_RETENTION=900;
SQL show parameter undo_retention
NAME TYPE VALUE
———————————— ———– ——————————
undo_retention integer 900
如果值為 900,則可以使還原數(shù)據(jù)保留 15 分鐘,當然需要足夠的存儲空間才行。
那么如何計算每秒生成的還原數(shù)據(jù)塊的數(shù)量呢,可以通過 v$undostat 視圖的 begin_time、end_time 和 undoblks 三個字段的值查詢出來,計算的 SQL 語句如下:
SQL SELECT (UR * (UPS * DBS)) + (DBS * 24) AS Bytes FROM (SELECT
value AS UR FROM v$parameter WHERE name = undo_retention ),(SELECT
(SUM(undoblks)/SUM(((end_time -begin_time)*86400))) AS UPS FROM
v$undostat), (SELECT value AS DBS FROM v$parameter WHERE
name = db_block_size
Bytes
———-
445814.844
詳解:
一般應該在一天中數(shù)據(jù)庫負載最繁重的時候進行計算。
對于 UNDO 表空間大小的定義需要考慮 UNDO_RETNETION 參數(shù)、產(chǎn)生的 UNDO BLOCKS/ 秒、UNDO
BLOCK 的大小。undo_retention:對于 UNDO 表空間的數(shù)據(jù)文件屬性為 autoextensible, 則 undo_retenion 參數(shù)必須設置,UNDO 信息將至少保留至 undo_retention
參數(shù)設定的值內(nèi),但 UNDO 表空間將會自動擴展。對于固定 UNDO 表空間,將會通過表空間的剩余空間來最大限度保留 UNDO 信息。如果 FIXED
UNDO 表空間沒有對保留時間作 GUARANTEE(alter
tablespace xxx retention
guarantee;),則 undo_retention 參數(shù)將不會起作用。(警告:如果設置 UNDO 表空間為 retention
guarantee,則未過期的數(shù)據(jù)不會被復寫,如果表空間不夠則會導致 DML 操作失敗或者 transation 掛起)
Oracle 10g 有自動 Automatic Undo Retention Tuning 這個特性。設置的 undo_retention
參數(shù)只是一個指導值,,Oracle 會自動調(diào)整 Undo (會跨過 undo_retention 設定的時間) 來保證不會出現(xiàn) Ora-1555
錯誤.。通過查詢 V$UNDOSTAT(該視圖記錄 4 天以內(nèi)的 UNDO 表空間使用情況,超過 4 天可以查詢 DBA_HIST_UNDOSTAT 視圖)的
tuned_undoretention(該字段在 10G 版本才有,9I 是沒有的)字段可以得到 Oracle
根據(jù)事務量(如果是文件不可擴展,則會考慮剩余空間)采樣后的自動計算出最佳的 retenton
時間.。這樣對于一個事務量分布不均勻的數(shù)據(jù)庫來說,,就會引發(fā)潛在的問題 – 在批處理的時候可能 Undo 會用光,而且這個狀態(tài)將一直持續(xù),
不會釋放。
SQL 查詢 tuned_undoretention:
select to_char(begin_time, DD-MON-RR HH24:MI)
begin_time,to_char(end_time, DD-MON-RR HH24:MI)
end_time,tuned_undoretention from v$undostat order by end_time;
檢查一天平均每秒產(chǎn)生的 UNDO BLOCK
select (sum(undoblks)/sum((end_time-begin_time)*86400) from v$undostat;
生成的結(jié)果是 UNDO BLOCK,如果需要計算出實際大小,則需要乘以 db_block_size(通過 show parameter db_block_size 查出來)
如何計算合適的 UNDO 表空間大小:
select (UR*(UPS*DBS))+(DBS*24) as bytes from (select value as UR from
v$parameter where name= undo_retention ),(select
(sum(undoblks)/sum(((end_time-begin_time)*86400))) as ups from
v$undostat),(select value as DBS from v$parameter where
name= db_block_size
看完上述內(nèi)容,你們對如何評估 undo 表空間大小有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝大家的支持。