Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2896307
  • 博文数量: 599
  • 博客积分: 16398
  • 博客等级: 上将
  • 技术积分: 6875
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-30 12:04
个人简介

WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606

文章分类

全部博文(599)

文章存档

2014年(12)

2013年(56)

2012年(199)

2011年(105)

2010年(128)

2009年(99)

分类: Oracle

2010-01-10 14:46:09

监控回滚段使用


回滚段管理(一) 回滚段的概述:http://blog.chinaunix.net/u3/107027/showart_2144676.html
回滚段管理(二) 回滚段的空间使用 http://blog.chinaunix.net/u3/107027/showart_2144703.html

对回滚段的监控要求与数据段类似。

一、监控当前空间分配

若要查看数据库回滚段的当前空间分配情况,可查询DBA_SEGMENTS字典视图,这里的SegmentType等于"ROLLBACK":

SQL>  SELECT EGMENT_NAME,TABLESPACE_NAME,HEADER_FILE,HEADER_BLOCK,BYTES FROM DBA_SEGMENTS WHERE SEGMENT_TYPE='ROLLBACK';

SEGMENT_NAME    TABLESPACE_NAME HEADER_FILE HEADER_BLOCK      BYTES
--------------- --------------- ----------- ------------ ----------
SYSTEM          SYSTEM                    1            2     458752
ROLL1           SYSTEM                    1        28248     262144
ROLL2           SYSTEM                    1        28256     327680
ROLL3           SYSTEM                    1        28264   26886144
ROLL4           SYSTEM                    1        28272     655360
ROLL5           ROLLTBS                   6            5    2097152
ROLL6           ROLLTBS                   6          133    2097152
PUB_ROLL7       ROLLTBS                   6          261    2097152
PUB_ROLL8       ROLLTBS                   6          389    2097152
PUB_ROLL9       ROLLTBS                   6          517    2097152

已选择10行。

表7-1列出了查询后返回的有关列。

表7-1 DBA_SEGMENTS中的回滚段相关列


          列名                             描述


     SegmentName                      回滚段的名称
     Tablespace_Name                  存储回滚段的表空间
     Header_File                      存储回滚段第一个盘区的文件
     Bytes                            实际分配的回滚段大小,以字节为单位
     Blocks                           实际分配的回滚段大小,以Oracle块为单位
     Extents                          回滚段中的盘区数
     Initial_ Extent                  初始盘区的大小
     Next_Extent                      下一个盘区的大小
     Min_Extents                      回滚段的最小盘区数
     Max_Extents                      回滚段的最大盘区数


  optimal参数的值没有存储在DBA_SEGMENTS中。它存储在V$ROLLSTAT动态性能表的OptSize列中。若要检索这个值,必须对V$ROLLSTAT和V$ROLLNAME一起查询,以同时获取该回滚段的名称和optimal参数值。


  SQL> SELECT N.NAME,S.OPTSIZE
  2  FROM V$ROLLNAME N,V$ROLLSTAT S
  3  WHERE N.USN = S.USN;

NAME               OPTSIZE
--------------- ----------
SYSTEM
ROLL6              5242880
PUB_ROLL7
PUB_ROLL8
PUB_ROLL9
ROLL5              5242880

已选择6行。

如果没为回滚段指定optimal值,查询返回的OptSize值将是空值(NULL)。

二、收缩回滚段


   可以对回滚段进行收缩。可以用alter rollback segment命令中的shrink子句,将回滚段收缩到想要的大小。若没有指定收缩尺寸,回滚段将收缩到其optimal值。但不能把回滚段收缩到小于两个盘区。

  在下面的例子中,对ROLL5回滚段做了两次修改。第一个命令将ROLL5回滚段收缩到15MB,第二个命令将它收缩到其optimal值:

SQL> ALTER ROLLBACK SEGMENT  ROLL5 SHRINK TO 15M;

回退段已变更。

SQL> ALTER ROLLBACK SEGMENT  ROLL5 SHRINK;

回退段已变更。

三、监控当前状态

   要得到有关回滚段状态的信息,可以查询DBA_ROLLBACKSEGS视图。这个视图不仅含有DBA_SEGMENTS中提供的存储参数(包括Tablespace_Name、Initial_Extent、Next_Extent、Min_Extents、Max_Extents和Relative_FNo),还包括了表7 - 2列出的另两个列: Status和InstanceNum。

                  表7-2 DBA_ROLLBACK_SEGS中的附加列


         列名                  说明


      Status              回滚段的状态
     InstanceNum          回滚段所属的实例。对于单实例系统,这个值是NULL(空值)


  回滚段的状态将是表7 - 3 列出的一个值。如果当前状态是OFFLINE 或PARTLY VAILABLE,就可以使一个回滚段联机。如果回滚段含有由未解决的跨越多个数据库的事务使用的数据,它的状态值为PARTLY AVAILABLE 。

 

四、监控动态扩展


    回滚段可以扩展,也可以收缩。另外,回滚段条目也会在盘区不够时,在回滚段内一个接一个地覆盖盘区。所有这三种情况,都需要数据库执行另外的操作来处理这些事务。但这些附加操作会影响数据库的性能。要考虑到,当一个条目覆盖和使回滚段扩展到另一个盘区时,那些大型事务处理常常会使回滚段扩展到超过o p t i m a l值。处理这种事件的过程很像下面所述:


1) 事务处理开始。
2) 在回滚段头中,为新事务条目增加一个条目。
3) 事务条目在回滚段的一个盘区中获得数据块。
4) 条目试图覆盖到第二个盘区。若没有可用段,则必须扩展回滚段。
5) 扩展回滚段。
6) 更新用于空间管理的数据字典表。
7) 事务完成。
8) 回滚段检查是否超过它的盘区o p t i m a l值,若已超过,就执行下面步骤。
9) 回滚段选择其最旧的非激活盘区。
10)删除这个最旧的非激活盘区。


如果回滚段大小已定,条目适合在一个盘区中完成,则过程如下:
1) 事务处理开始。
2) 在回滚段头部为新事务条目增加一个条目。
3) 事务条目在回滚段的一个盘区中获得数据块。
4) 事务完成。


    空间管理所需要的系统开销量明显地节省了。收缩、覆盖、扩展等一系列操作,均可使用V$ROLLSTAT动态性能表来进行监控。

  V$ROLLNAME和V$ROLLSTAT之间存在着一对一关系,并且都具有一个主关键字USN(Undo Segment Number)。当以特别方式查询它们时,可以用这个关键字来将它们连结,如下所示:


SQL> SELECT N.NAME,S.RSSIZE
  2  FROM V$ROLLNAME N,V$ROLLSTAT S
  3  WHERE N.USN = S.USN

NAME                RSSIZE
--------------- ----------
SYSTEM              442368
ROLL6              2080768
PUB_ROLL7          2080768
PUB_ROLL8          2080768
PUB_ROLL9          2080768
ROLL5              2080768

已选择6行。

五、回滚段的数据量

    可以查询V$ROLLSTAT来确定写入回滚段的字节数。V$ROLLSTAT含有Writes列,它记录了自从数据库上次启动以来写入每一个回滚段的字节数。若要确定一个指定的时间间隔内一个回滚段中的活动量,可以在测试期开始时选择Writes列。当测试结束时,可以查询当前值,两者之间的差别便是在这个时间间隔中写入回滚段的字节数。由于关闭数据库将会复位V$ROLLSTAT表中的统计值,所以在测试期间必须保持数据库为打开状态。
  可以用下面的查询从V$ROLLSTAT表中选择Writes值:

SQL> SELECT N.NAME,S.WRITES
  2  FROM V$ROLLNAME N,V$ROLLSTAT S
  3  WHERE N.USN = S.USN
  4  /

NAME                WRITES
--------------- ----------
SYSTEM                2484
ROLL6                72424
PUB_ROLL7           125796
PUB_ROLL8           105270
PUB_ROLL9           154454
ROLL5                27954

已选择6行。

  要检测由一个事务创建的回滚段的大小,需要把这些查询与本章前面所给的一个命令结合起来。首先,通过执行它来分离该事务,它是数据库中的唯一进程。通过下面的命令把事务指定到特定的回滚段:

           SET TRANSACTION USE ROLLBACK SEGMENT SEGMENT_NAME


  然后为此回滚段查询V$ROLLSTAT表中的Writes列。当事务处理完时,重新查询V$ROLLSTAT。这两个Writes值之间的差值,便是事务回滚段条目的准确大小。

 

 

阅读(1647) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~