SQL> show parameter undo
NAME_COL_PLUS_SHOW_PARAM TS Type VALUE_COL_PLUS_SHOW_PARAM
-------------------------------------- ----------- ------------------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
SQL> select status,count(*) from dba_rollback_segs
group by status;
Status COUNT(*)
---------------- ----------
ONLINE 11
SQL> show parameter rollback
NAME_COL_PLUS_SHOW_PARAM TS Type VALUE_COL_PLUS_SHOW_PARAM
------------------------------------- ---------- ---------------------------------
fast_start_parallel_rollback string LOW
rollback_segments string
transactions_per_rollback_segment integer 5
--------------------------------------------------------------
参数:规范有4个参数
1.transactions_per_rollback_segment
默认值是5,每个undo处理5个事物
参数说明:
参数类型:整型
默认值: 5
修改:修改需要重启数据库(静态)
基础参数:否
取值范围:1到操作系统相关
RAC中可以有不同的值
取值意义:
该参数指定每个回滚段中你希望可以同时处理多少个进行的事务
数据库实例启动时分配的最小回滚段数?由该参数和TRANSACTIONS决定
如:TRANSACTIONS是554,该参数为5,则最小数量为554/5,共需要111个
SQL> show parameter transactions_per_rollback_segment
查询:show parameter transactions;
修改: alter system set transactions_per_rollback_segment=10 scope=spfile;
2.undo_retention 撤销保留时间 (一般不做修改)
是一个“目标期望值”。用户设置出这个值之后,Oracle内部会尽量保证将Undo数据保留超过undo_retention设置的时间。
900 秒
3._highthreshold_undoretention (highthreshold阈值)
24000 单位是秒 undo 不改默认是24000
设置_HIGHTHRESHOLD_UNDORETENTION,虽然允许Oracle自动调整undo retention,但是为它设置一个天花板,不会过份地受MAXQUERYLEN的影响,也就是_highthreshold_undoretention说undo_retention的最大可设置值
SQL> select max(MAXQUERYLEN) from v$undostat;
占用undo的实例最长的查询时间
MAX(MAXQUERYLEN)
----------------
257587
参数说明:_highthreshold_undoretention
patch: A fix to bug 7291739 is to set a new hidden parameter, _highthreshold_undoretention to set a high threshold for undo retention
completely distinct from maxquerylen.
修改:alter system set "_highthreshold_undoretention"=24000 scope=both; //隐含参数为加双引号
4._rollback_segment
可以使用rollback_segments参数来分配更多的回滚段,注意rollback_segments参数只在手动undo管理中生效
Rollback Segment:它是数据库中的一部分存储空间,用来临时保存当数据库数据发生改变时的先前值,Rollback Segment主要有两个作用:
1.如果通过Rollback操作来取消一段数据操作,那么数据就会恢复到之前为改变的原始值,这种情况在transaction的过程中有效。如果用户执行了commit命令,那么Rollback Segment里面的值就会标识为失效,数据的改变将永久化。
2.如果一个select语句在读取一个表的同时另有一个事务也在修改这个表的值,那么select语句select出来的数据是在修改之前的值,因为修改之前的原数据存入到了Rollback Segment中。
5._rollback_segment_count
默认是规范4000:
最小rollback_segment在线数量,也就是最小4000个回滚段
改的时候500,500的加,一次加到4000可能报错加不上去。
修改:Alter system set "_rollback_segment_count"= scope=both;
参数说明:_rollback_segment_count
Bug 6658921 - Provide parameter to help reduce performance slowdown due to excessive transaction table rollbacks (Doc ID 6658921.8)
Description
Excessive rollbacks can occur showing as rapidly increasing values
for the statistic "transaction tables consistent reads - undo records applied" .
This can occur in systems where there is a high transaction rate
but not high concurrency. In this scenario the system may not online
lots of undo segments leading to undo segment headers wrapping
often. This fix allow SMON to dynamically alter the number of online
undo segments and keep a minimum of "_rollback_segment_count"
segments online at all times. The parameter can be set by the user
to ensure there are always a known minimum of undo segments
online thus spreading the transactions across more undo headers.
_rollback_segment_count为undo segments最小在线数量。
select status,count(*) from dba_rollback_segs
group by status;
STATUS COUNT(*)
----------- -------------------
ONLINE 8001
OFFLINE 276
2336595.1
默认是0,实际起10个。其中1个system。
_rollback_segment_count可以动态修改,不需要重启生效。
调小不可以,只能往上调。
online不能调小,可能smon挂掉。规避smon挂掉。