app开发者平台在数字化时代的重要性与发展趋势解析
345
2023-12-17
今天就跟大家聊聊有关如何评估undo表空间大小,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
如何估算Oracle数据库所需的UNDO表空间的大小:How To Size UNDO Tablespace For Automatic Undo Management (文档 ID 262066.1)要确定Oracle需要的UNDO 表空间的大小,需要以下三条信息: UR 以秒为单位的UNDO_RETENTION UPS 每秒生成的还原数据块的数量 DBS db_block_sizeUndoSpace = [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 BLOCKselect (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表空间大小有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~