如何评估undo表空间大小

71次阅读
没有评论

共计 2383 个字符,预计需要花费 6 分钟才能阅读完成。

今天就跟大家聊聊有关如何评估 undo 表空间大小,可能很多人都不太了解,为了让大家更加了解,丸趣 TV 小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

如何估算 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 表空间大小有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注丸趣 TV 行业资讯频道,感谢大家的支持。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-19发表,共计2383字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)