您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何評估undo表空間大小,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
如何估算Oracle數據庫所需的UNDO表空間的大小:
How To Size UNDO Tablespace For Automatic Undo Management (文檔 ID 262066.1)
要確定Oracle需要的UNDO 表空間的大小,需要以下三條信息:
UR 以秒為單位的UNDO_RETENTION
UPS 每秒生成的還原數據塊的數量
DBS db_block_size
UndoSpace = [UR * (UPS * DBS)] + (DBS * 24)
UNDO_RETENTION是一個參數,此參數控制為提供讀一致性而保留的還原數據量,以秒為單位定義,可以在初始化文件中設置,或使用 ALTER SYSTEM 命令來動態修改。
SQL>ALTER SYSTEM SET UNDO_RETENTION=900;
SQL> show parameter undo_retention
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_retention integer 900
如果值為900,則可以使還原數據保留 15 分鐘,當然需要足夠的存儲空間才行。
那么如何計算每秒生成的還原數據塊的數量呢,可以通過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
詳解:
一般應該在一天中數據庫負載最繁重的時候進行計算。
對于UNDO表空間大小的定義需要考慮UNDO_RETNETION參數、產生的UNDO BLOCKS/秒、UNDO
BLOCK的大小。undo_retention:對于UNDO表空間的數據文件屬性為autoextensible,則undo_retenion參數必須設置,UNDO信息將至少保留至undo_retention
參數設定的值內,但UNDO表空間將會自動擴展。對于固定UNDO表空間,將會通過表空間的剩余空間來最大限度保留UNDO信息。如果FIXED
UNDO表空間沒有對保留時間作GUARANTEE(alter
tablespace xxx retention
guarantee;),則undo_retention參數將不會起作用。(警告:如果設置UNDO表空間為retention
guarantee,則未過期的數據不會被復寫,如果表空間不夠則會導致DML操作失敗或者transation掛起)
Oracle 10g 有自動Automatic Undo Retention Tuning 這個特性。設置的 undo_retention
參數只是一個指導值,,Oracle 會自動調整 Undo (會跨過 undo_retention 設定的時間) 來保證不會出現 Ora-1555
錯誤.。通過查詢V$UNDOSTAT(該視圖記錄4天以內的UNDO表空間使用情況,超過4天可以查詢DBA_HIST_UNDOSTAT視圖) 的
tuned_undoretention (該字段在10G版本才有,9I是沒有的)字段可以得到Oracle
根據事務量(如果是文件不可擴展,則會考慮剩余空間)采樣后的自動計算出最佳的 retenton
時間.。這樣對于一個事務量分布不均勻的數據庫來說,,就會引發潛在的問題--在批處理的時候可能 Undo 會用光, 而且這個狀態將一直持續,
不會釋放。
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;
檢查一天平均每秒產生的UNDO BLOCK
select (sum(undoblks)/sum((end_time-begin_time)*86400) from v$undostat;
生成的結果是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');
看完上述內容,你們對如何評估undo表空間大小有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。