undoシリーズ学習の最適なundo_の計算方法义齿retentionの初体験
undo_retentionは、最大データの最小保存時間を簡単に定義します.AUMモードでundo_retentionパラメータは、トランザクションcommit後のundoデータの保持時間に使用されます.秒単位です.これはno guaranteeの制限です.つまり、空間が十分であれば、彼は「花瓶」にすぎない.空き領域が不足し、トランザクションがロールバックする必要がある場合でも、これらのデータは上書きされます.この動作はORA-01555エラーを引き起こす可能性があります.これらのデータが記憶されている時間はv$undostatのフィールドTUNED_を使用することができます.UNDORETENTIONが照会します.
多くの場合、undoデータは上書きされるのではなく、保存されることを望んでいます.では、10 gでoracleはundoにguarantee制御を追加し、すなわち、ユーザはundoテーブル空間がundo_を満たす必要があることを指定することができる.retentionの制限.
所望の保持時間を設定してundoテーブル空間属性を変更することで、undoテーブル空間をguaranteeモードで実行できます.次に、noguaranteeとguaranteeの違いを実験で体験します.
undo_retentionの設定はフラッシュバック機能に責任を負います.カラムのタイプがLOBの場合、自動undoデータの記憶はLOBsをサポートしていません.undo_を設定する必要があります.retentionの値はできるだけ引き留める.oracleはundo segmentヘッダーにretention tableを作成し、関連するundoストレージのコミット時間を記録し、その保存ポリシーを実現します.
最適undo_retentionはどのように計算しますか?
ファジイ計算では、次のことができます.
トランザクション・アイソレーション・レベルがserializableまたはread onlyの場合、undo_retentionは最長実行のトランザクションよりやや長い.トランザクション・アイソレーション・レベルがread commitedの場合、undo_retentionは最長実行文(DML)よりやや長い.
正確な計算は、数式を使用します.
比較的代表的な期間を選択してテストしたり、複数のセグメントを除去したりして、加重平均を設定する必要があります.
多くの場合、undoデータは上書きされるのではなく、保存されることを望んでいます.では、10 gでoracleはundoにguarantee制御を追加し、すなわち、ユーザはundoテーブル空間がundo_を満たす必要があることを指定することができる.retentionの制限.
alter tablespace undotbs1 retention guarantee|noguarantee;
所望の保持時間を設定してundoテーブル空間属性を変更することで、undoテーブル空間をguaranteeモードで実行できます.次に、noguaranteeとguaranteeの違いを実験で体験します.
sys@ORCL> select tablespace_name,contents,retention from dba_tablespaces where tablespace_name like '%UNDOTBS%';
TABLESPACE_NAME CONTENTS RETENTION
------------------------------ --------- -----------
UNDOTBS1 UNDO NOGUARANTEE
sys@ORCL> alter system set undo_retention=800;
System altered.
sys@ORCL> alter tablespace undotbs1 retention guarantee;
Tablespace altered.
sys@ORCL> select tablespace_name,contents,retention from dba_tablespaces where tablespace_name like '%UNDOTBS%';
TABLESPACE_NAME CONTENTS RETENTION
------------------------------ --------- -----------
UNDOTBS1 UNDO GUARANTEE
undo
sys@ORCL> select file_name,tablespace_name,bytes/1024/1024 m from dba_data_files where tablespace_name like '%UNDOTBS%';
FILE_NAME TABLESPACE_NAME M
------------------------------------------------------------------------ ------------------------------ ----------
/u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_8050fkc6_.dbf UNDOTBS1 30
sys@ORCL> alter database datafile '/u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_8050fkc6_.dbf' autoextend off;
Database altered.
, guarantee , ORA-30036 :
hr@ORCL> select count(*) from t;
COUNT(*)
----------
1462140
hr@ORCL> begin
2 for i in 1..1000
3 loop
4 delete from t where rownum<1001;
5 commit;
6 end loop;
7 end;
7 /
begin
*
ERROR at line 1:
ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS1'
ORA-06512: at line 4
hr@ORCL> select count(*) from t;
COUNT(*)
----------
14620000
undo retention ,
hr@ORCL> begin
2 for i in 1..1000
3 loop
4 delete from t where rownum<1001;
5 commit;
6 end loop;
7 end;
8 /
PL/SQL procedure successfully completed.
undo_retentionの設定はフラッシュバック機能に責任を負います.カラムのタイプがLOBの場合、自動undoデータの記憶はLOBsをサポートしていません.undo_を設定する必要があります.retentionの値はできるだけ引き留める.oracleはundo segmentヘッダーにretention tableを作成し、関連するundoストレージのコミット時間を記録し、その保存ポリシーを実現します.
最適undo_retentionはどのように計算しますか?
ファジイ計算では、次のことができます.
トランザクション・アイソレーション・レベルがserializableまたはread onlyの場合、undo_retentionは最長実行のトランザクションよりやや長い.トランザクション・アイソレーション・レベルがread commitedの場合、undo_retentionは最長実行文(DML)よりやや長い.
正確な計算は、数式を使用します.
比較的代表的な期間を選択してテストしたり、複数のセグメントを除去したりして、加重平均を設定する必要があります.
SELECT d.undo_size/(1024*1024) "ACTUAL UNDO SIZE [MByte]",
SUBSTR(e.value,1,25) "UNDO RETENTION [Sec]",
ROUND((d.undo_size / (to_number(f.value) *
g.undo_block_per_sec)))"OPTIMAL UNDO RETENTION [Sec]"
FROM (
SELECT SUM(a.bytes) undo_size
FROM v$datafile a,
v$tablespace b,
dba_tablespaces c
WHERE c.contents = 'UNDO'
AND c.status = 'ONLINE'
AND b.name = c.tablespace_name
AND a.ts# = b.ts#
) d,
v$parameter e,
v$parameter f,
(
SELECT MAX(undoblks/((end_time-begin_time)*3600*24))undo_block_per_sec
FROM v$undostat
) g
WHERE e.name = 'undo_retention'
AND f.name = 'db_block_size'
ACTUAL UNDO SIZE [MByte] UNDO RETENTION [Sec] OPTIMAL UNDO RETENTION [Sec]
30 900 40421