如何评估撤消表空间大小

分类:编程技术 时间:2024-02-20 16:08 浏览:0 评论:0
0
今天就和大家聊聊如何评估undo表空间大小。很多人可能对此还不是很了解。为了让大家更好的了解,小编为大家总结了以下内容。希望您能从本文中有所收获。

如何估算Oracle数据库所需的UNDO表空间大小:
如何调整 UNDO 表空间的大小以进行自动撤消管理(文档 ID 262066.1)

要确定 Oracle 所需的 UNDO 表空间的大小,以下三项为必填信息:

UR UNDO_RETENTION(秒)
UPS 每秒生成的恢复块数量
strong>
DBS db_block_size

UndoSpace = [UR * (UPS * DBS)] + (DBS * 24)

UNDO_RETENTION是一个参数,控制恢复的数据保留量提供读一致性。它以秒为单位定义,可以在初始化文件中设置或使用 ALTER SYSTEM 命令动态修改。

SQL>ALTER SYSTEM SET UNDO_RETENTION=900;

SQL> 显示参数undo_retention

名称类型值
-------------------------------------- ---------- ---------- ------------------------------ -
undo_retention integer 900
如果value为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$帕参数 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' );
字节
----------< br/> 445814.844


详细说明:

一般应在该时间内执行数据库负载最重的一天。计算。
定义UNDO表空间的大小时,需要考虑UNDO_RETNETION参数、每秒生成的UNDO BLOCKS以及UNDO BLOCK的大小。 undo_retention:如果UNDO表空间的数据文件属性是可自动扩展的,则必须设置undo_retenion参数。 UNDO信息将至少保留到undo_retention参数设置的值,但UNDO表空间将自动扩展。对于固定UNDO表空间,UNDO信息w将通过表空间的剩余空间最大程度地保留。如果 FIXED UNDO 表空间没有 GUARANTEE(altertablespace xxx 保留保证;),则 undo_retention 参数将不起作用。 (警告:如果UNDO表空间设置为保留保证,未过期的数据不会被覆盖。如果表空间不够,DML操作会失败或者事务挂起)


Oracle 10g 具有自动撤消保留调整功能。设置的undo_retention参数只是一个指导值,Oracle会自动调整Undo(会跨越undo_retention设置的时间)以确保不会发生Ora-1555错误。通过查询V$UNDOSTAT(该视图记录4天内UNDO表空间使用情况,超过4天可以查询DBA_HIST_UNDOSTAT视图)和tuned_undoretention(该字段仅在10G版本有,9I版本没有)字段,您可以根据(如果文件不可扩展,则将考虑剩余空间。)采样后自动计算最佳保留时间。这对于事务量分布不均匀的数据库来说,会带来潜在的问题——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参数db_block_size找到)

如何计算计算适当的UNDO表空间大小:
select (UR*(UPS*DBS))+(DBS*24) as "bytes" from (select value as UR from v$parameter where name='undo_retention'), (从 v$undostat 选择 (sum(undoblks)/sum(((end_time-begin_time)*86400))) 作为 ups),(从 v$parameter 选择值作为 DBS,其中 name='db_block_size ');

看完上面的内容,您是不是对如何评估undo表空间大小有了进一步的了解呢?如果您想了解更多知识或相关内容,请关注行业资讯频道。感谢您的支持。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何评估撤消表空间大小

用户评论