AUM(自动 undo 管理,Automatic Undo Management)几乎不需要配置。您基本上只需要定义将前映像保持可用的时间量。这是通过参数 UNDO_RETENTION 控制的,以秒为单位定义。因此,值 900 表示 15 分钟。
一定要意识到,如果 undo 表空间中存在空间压力时,我们不保证前镜像一定会保留这么长时间。
因此,以下公式可用于计算最佳 undo 表空间大小:
从
Oracle 10g 开始,您可以选择使用 GUARANTEE 选项,以确保在定义的 undo_retention 时间之前,undo 信息不会被覆盖。
UNDO表空间大小由三部分组成:
(UR)UNDO_RETENTION 单位秒
(UPS)每秒产生的undo 数据块的个数
(DBS)
数据库数据文件块的大小DB_BLOCK_SIZE
计算公式
UndoSpace=UR*(UPS*DBS)
其中UNDO_RETENTION 和 DB_BLOCK_SIZE两部分的信息可以在实例配置参数信息中获取。
而第三部分UPS的信息需要从动态性能试图V$UNDOSTAT中获取
下面是获取(UPS)每秒产生的undo 数据块的个数.
SQL> SELECT undoblks/((end_time-begin_time)*86400) "Peak Undo Block Generation"
FROM v$undostat WHERE undoblks=(SELECT MAX(undoblks) FROM v$undostat);
其中列END_TIME and BEGIN_TIME 是日期类型,需要转换成秒(24 hours * 60 minutes * 60 seconds).
下面的
SQL是计算UNDO表空间大小
SQL> SELECT (UR * (UPS * DBS)) AS "Bytes"
FROM (SELECT value AS UR FROM v$parameter WHERE name = 'undo_retention'),
(SELECT undoblks/((end_time-begin_time)*86400) AS UPS
FROM v$undostat
WHERE undoblks = (SELECT MAX(undoblks) FROM v$undostat)),
(SELECT block_size AS DBS
FROM dba_tablespaces
WHERE tablespace_name = (SELECT UPPER(value) FROM v$parameter WHERE name = 'undo_tablespace'));
|
10g 和10g 更高的版本,可以使用下面的查询:
SQL>SELECT (UR * (UPS * DBS)) AS "Bytes"
FROM (select max(tuned_undoretention) AS UR from v$undostat),
(SELECT undoblks/((end_time-begin_time)*86400) AS UPS
FROM v$undostat
WHERE undoblks = (SELECT MAX(undoblks) FROM v$undostat)),
(SELECT block_size AS DBS
FROM dba_tablespaces
WHERE tablespace_name = (SELECT UPPER(value) FROM v$parameter WHERE name = 'undo_tablespace'));
|
最新内容请见作者的GitHub页:http://qaseven.github.io/