oracle回滚段利用率,oracle程序性能优化实录-回滚段

1.1回滚段的基本概念

(1)回滚段概述

回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值)。回滚段的头部包含正在使用的该回滚段事务的信息。一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回滚信息。

(2)回滚段的作用

事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的到原来的值。

事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在重做日志文件中,ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。

读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。而且,当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)。当ORACLE执行SELECT语句时,ORACLE依照当前的系统改变号(SYSTEM

CHANGE NUMBER-SCN)来保证任何前于当前SCN的未提交的改变不被该语句处理。可以想象:当一个长时间的查询正在执行时,若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图。

(3)回滚段的类型

回滚段可分为系统回滚段和非系统回滚段,其中非系统回滚段又分为PUBLIC回滚段和PRIVATE回滚段。

回滚段:1系统回滚段

2非系统回滚段:(1)PUBLIC回滚段

(2)PRIVATE回滚段

系统回滚段用于处理涉及系统的CATALOG的事物(比如大多数的DDL),它位于SYSTEM表空间,由于只有SYSTEM表空间可以随时保持可用,因此,不要把SYSTEM回滚段放在其他的表空间中。

原则1:系统回滚段应放在SYSTEM表空间中,并且应该永远保持ONLINE状态。PUBLIC回滚段对于数据库的所有实例(INSTANCE)都是可用的,除非将其显式设置为OFFLINE。

PRIVATE回滚段是指对于数据库的某个实例是私有的,为了使用PRIVATE回滚段,某个实例应当在其INITsid.ORA的ROLLBACK_SEGMENTS中标明所有要使用的PRIVATE回滚段,或通过使用ALTER

ROLLBACK SEGMENT XXX ONLINE来使用某一个回滚段。

建议1:在单实例系统中,建议将所有回滚段设为PUBLIC.

建议2:在多实例系统中(如OPS,RAC),建议将每个实例的PRIVATE回滚段放置到访问比较快的本地设备上。

(4)回滚段的数量规划

对于OLTP系统,存在大量的小事务处理,一般建议:

数量多的小回滚段;每四个事务一个回滚段;每个回滚段不要超过十个事务。

对于批处理,一般建议:

少的大回滚段;每个事务一个回滚段。

(5)回滚段的使用

分配回滚段:当事务开始时,ORACLE将为该事务分配回滚段,并将拥有最少事务的回滚段分配给该事务。事务可以用以下语句申请指定的回滚段:

SET TRANSTRACTION USE

ROLLBACK SEGMENT rollback_segment

事务将以顺序,循环的方式使用回滚段的区(EXTENTS),当当前区用满后移到下一个区。几个事务可以写在回滚段的同一个区,但每个回滚段的块只能包含一个事务的信息。

例如(两个事务使用同一个回滚段,该回滚段有四个区):

Ø事务在进行中,它们正在使用回滚段的第三个区;

Ø当两个事务产生更多的回滚信息,它们将继续使用第三个区;

Ø当第三个区满后,事务将写到第四个区,当事务开始写到一个新的区时,称为翻转(WRAP);

Ø当第四个区用满时,如果第一个区是空闲或非活动(使用该区的所有事务完成而没有活动的事务)的,事务将接着使用第一个区。

1.2Undo表空间

Undo是存储在表空间中的。UNDO表空间通常都是Oracle自动化管理(通过undo_management初始化参数确定);UNDO表空间是用于存储DML操作的前镜像数据,它是实例恢复,数据回滚,一致性查询功能的重要组件;我们常常会忽略对它的监控,这会导致UNDO表空间可能出现以下问题:

Ø空间使用率100%,导致DML操作无法进行。

Ø告警日志中出现大量的ORA-01555告警错误。

Ø实例恢复失败,数据库无法正常打开。

(1)查找当前undo表空间

show parameter undo_tablespace

(2)创建Undo表空间undotbs2

create undo tablespaceundotbs2 datafile

'/u01/app/oracle/undotbs2.dbf'

(3)设置undotbs2为当前undo表空间

alter system set undo_tablespace=undotbs2;

(4)UNDO表空间总大小

UNDO表空间下也以段的形式存储数据,每个事务对应一个段,这种类型的段通常被称为回滚段,或者UNDO段。默认情况下,数据库实例会初始化10个UNDO段,这主要是为了避免新生成的事务对UNDO段的争用。

UNDO表空间的总大小就是UNDO表空间下的所有数据文件大小的总和

select tablespace_name,contentsfrom dba_tablespaces where

tablespace_name='UNDOTBS1'

(5)查看UNDO表空间的使用情况

select owner,segment_name,bytes/1024/1024mb from

dba_segments

where tablespace_name='UNDOTBS1';

(6)分析UNDO的使用情况

SELECT TABLESPACE_NAME,STATUS,TRUNC(SUM(BLOCKS)* 8 / 1024) AS "Size

M",

COUNT(*) Undo_Extent_Num FROM DBA_UNDO_EXTENTSGROUP BY

TABLESPACE_NAME, STATUS;

(7)监控undo表空间

SELECT BEGIN_TIME, END_TIME,UNDOTSN, UNDOBLKS,

TXNCOUNT,MAXCONCURRENCY AS "MAXCON"

FROM V$UNDOSTAT;

1.3回滚段的查询

(1)查询数据库的的回滚段情况

select owner,segment_id,segment_name,tablespace_name,statusfrom

dba_rollback_segs;

(2)查看系统回滚段基本信息

select segment_name,tablespace_name,bytes,next_extentfrom

dba_segments

where segment_type='ROLLBACK';

从上面仅仅是查询到回滚段的基本信息,要了目前各个回滚段的动态信息,还要查询V$ROLLNAME和V$ROLLSTAT视图。V$ROLLNAME视图只存放各回滚段的编号和名字,V$ROLLSTATS存放各个回滚段当前的情况信息。要想得到每个回滚段的信息,就要查询两个表的信息才能得到。如:

select s.usn,n.name,s.extents,s.optsize,s.hwmsize,s.statusfrom

v$rollstat s,

v$rollname n where s.usn=n.usn

(3)查看回滚段的使用情况,哪个用户正在使用回滚段的资源(当提交或回滚后资源释放):

SELECT s.username, u.nameFROM v$transaction t, v$rollstat r,

v$rollname u,

v$session s WHERE s.taddr = t.addrAND t.xidusn = r.usn AND r.usn =

u.usn

ORDER BY s.username;

(4)回滚段当前活动的事物(事务提交或回滚后自动清空)

SELECT

s.username,t.xidusn,t.ubafil,t.ubablk,t.used_ublk FROM v$session s,

v$transaction t;

(5)查询是否有回滚段的争用

select * from v$waitstat;

SELECT name, waits,gets, waits/gets "Ratio" FROM v$rollstat a,

v$rollname b

WHERE a.usn =b.usn;

(6)查看回滚段的统计信息:

SELECT n.name, s.extents,s.rssize, s.optsize, s.hwmsize, s.xacts,

s.status

FROM v$rollname n, v$rollstats WHERE n.usn = s.usn;

(7)查询回滚段的事务回退率

transaction rollbacks/(transactionrollbacks+user

commits)

select name,value fromv$sysstat where name in('user

commits','transaction rollbacks');

(8)查询回滚段在使用,扩展,回缩的时候extent在循环的次数

select usn,wraps fromv$rollstat;

(9)查询回滚段收缩的情况

select usn,optsize,shrinksfrom v$rollstat;

(10)查看未提交事务的信息

Select * from v$transaction;

3f64fc2894e782fd9aa37c2050bf0f31.png

其中,需要重点关注used_ublk。多次查询,如果used_ublk在增大,说明正在执行数据处理;如果used_ublk在减小,说明正在执行rollback,一直到used_ublk为0表示rollback结束,可以通过这个值大致估算出rollback的时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值