您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)如何評估undo表空間大小,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(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是一個(gè)參數(shù),此參數(shù)控制為提供讀一致性而保留的還原數(shù)據(jù)量,以秒為單位定義,可以在初始化文件中設(shè)置,或使用 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 分鐘,當(dāng)然需要足夠的存儲空間才行。
那么如何計(jì)算每秒生成的還原數(shù)據(jù)塊的數(shù)量呢,可以通過v$undostat視圖的begin_time、end_time和undoblks三個(gè)字段的值查詢出來,計(jì)算的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
詳解:
一般應(yīng)該在一天中數(shù)據(jù)庫負(fù)載最繁重的時(shí)候進(jìn)行計(jì)算。
對于UNDO表空間大小的定義需要考慮UNDO_RETNETION參數(shù)、產(chǎn)生的UNDO BLOCKS/秒、UNDO
BLOCK的大小。undo_retention:對于UNDO表空間的數(shù)據(jù)文件屬性為autoextensible,則undo_retenion參數(shù)必須設(shè)置,UNDO信息將至少保留至undo_retention
參數(shù)設(shè)定的值內(nèi),但UNDO表空間將會自動擴(kuò)展。對于固定UNDO表空間,將會通過表空間的剩余空間來最大限度保留UNDO信息。如果FIXED
UNDO表空間沒有對保留時(shí)間作GUARANTEE(alter
tablespace xxx retention
guarantee;),則undo_retention參數(shù)將不會起作用。(警告:如果設(shè)置UNDO表空間為retention
guarantee,則未過期的數(shù)據(jù)不會被復(fù)寫,如果表空間不夠則會導(dǎo)致DML操作失敗或者transation掛起)
Oracle 10g 有自動Automatic Undo Retention Tuning 這個(gè)特性。設(shè)置的 undo_retention
參數(shù)只是一個(gè)指導(dǎo)值,,Oracle 會自動調(diào)整 Undo (會跨過 undo_retention 設(shè)定的時(shí)間) 來保證不會出現(xiàn) Ora-1555
錯(cuò)誤.。通過查詢V$UNDOSTAT(該視圖記錄4天以內(nèi)的UNDO表空間使用情況,超過4天可以查詢DBA_HIST_UNDOSTAT視圖) 的
tuned_undoretention (該字段在10G版本才有,9I是沒有的)字段可以得到Oracle
根據(jù)事務(wù)量(如果是文件不可擴(kuò)展,則會考慮剩余空間)采樣后的自動計(jì)算出最佳的 retenton
時(shí)間.。這樣對于一個(gè)事務(wù)量分布不均勻的數(shù)據(jù)庫來說,,就會引發(fā)潛在的問題--在批處理的時(shí)候可能 Undo 會用光, 而且這個(gè)狀態(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,如果需要計(jì)算出實(shí)際大小,則需要乘以db_block_size(通過show parameter db_block_size查出來)
如何計(jì)算合適的UNDO表空間大?。?/strong>
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表空間大小有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。