[理论]undo有关的4个参数:transactions_per_rollback_segment,undo_retention,_highthreshold_undoretention,_rollb

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挂掉。

你可能感兴趣的:(ORACLE,undo,dba,oracle,数据库)