zhuang3088 发表于 2013-12-3 11:32:40

回滚段问题

数据库版本10.2.0.4

online回滚段太多了,感觉十分奇怪。
SQL> select status,count(*) from dba_rollback_segs group by status;

STATUS             COUNT(*)
---------------- ----------
ONLINE                  614
OFFLINE                  10

SQL> select count(*) from v$session;

  COUNT(*)
----------
        43

SQL> select count(*) from v$transaction;

  COUNT(*)
----------
         0

SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS1

=============================================
dba_rollback_segs的个数只增不减。
用什么手段可以查出原因。现在没方向了。

zhuang3088 发表于 2013-12-3 11:34:33

日志当中没有报错,而且还是新的库

harryzhang 发表于 2013-12-3 12:38:58

_undo_autotune 是多少~

harryzhang 发表于 2013-12-3 12:39:31

SELECT   status,
         Count(* ),
         Sum(blocks) * 8096 / 1024 / 1024
FROM     dba_undo_extents
GROUP BY status;


zhuang3088 发表于 2013-12-3 13:00:26

harryzhang 发表于 2013-12-3 12:38 static/image/common/back.gif
_undo_autotune 是多少~

NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
DESCRIB
--------------------------------------------------------------------------------
_undo_autotune
TRUE
enable auto tuning of undo_retention


zhuang3088 发表于 2013-12-3 13:01:54

harryzhang 发表于 2013-12-3 12:39 static/image/common/back.gif
SELECT   status,
         Count(* ),
         Sum(blocks) * 8096 / 1024 / 1024


SQL> /

STATUS      COUNT(*) SUM(BLOCKS)*8096/1024/1024
--------- ---------- --------------------------
UNEXPIRED        109                 8.58569336
EXPIRED         4281                 574.685547
ACTIVE            11                 .679443359

SQL> select count(*),status from dba_rollback_segs group by status;

  COUNT(*) STATUS
---------- ----------------
       768 ONLINE
        10 OFFLINE

dla001 发表于 2013-12-3 13:14:25

http://www.askmaclean.com/archives/automatic-undo-management-common-analysis-diagnostic-scripts.html

Liu Maclean(刘相兵 发表于 2013-12-3 14:07:17

了解你所不知道的SMON功能(十一):OFFLINE UNDO SEGMENT http://www.askmaclean.com/archives/smon-offline-undo-segment.html

不offline 很正常

zhuang3088 发表于 2013-12-3 14:07:30

dla001 发表于 2013-12-3 13:14 static/image/common/back.gif
http://www.askmaclean.com/archives/automatic-undo-management-common-analysis-diagnostic-scripts.html

查过了,问题还是那样,为什么回滚段个数在不断上升,而且也没有自动清理掉。
我大胆猜测一下,会不会有个会话一直连着,没有关闭,而且不断有事务从这个会话中并发发起呢?

zhuang3088 发表于 2013-12-3 16:49:56

Liu Maclean(刘相兵 发表于 2013-12-3 14:07 static/image/common/back.gif
了解你所不知道的SMON功能(十一):OFFLINE UNDO SEGMENT http://www.askmaclean.com/archives/smon-offline- ...

看了一下,收获甚多,先谢谢。
回滚段个数在不断增加,到达32000多个时,会不会触发一个BUG导致数据库宕,这个是我比较担心的。

我之前10.2.0.4的版本就碰到了回滚段过多,然后宕机,打补丁重建库的操作。没想到现在仍然如此,现象复现。

我想可能要从应用上分析了。

对于数据库本身来讲,是怎样一个场景致使回滚段不断增加的。
process、session、transaction、DML SQL在增加时的状态又是怎样的?
基础比较差,回家准备查资料了。

xifenfei 发表于 2013-12-3 17:02:21

rollback_segments 可以控制回滚段数量,但是这个需要慎重,可能导致回滚段不够,从而出现事务终止

zhuang3088 发表于 2013-12-4 17:54:32

Liu Maclean(刘相兵 发表于 2013-12-3 14:07 static/image/common/back.gif
了解你所不知道的SMON功能(十一):OFFLINE UNDO SEGMENT http://www.askmaclean.com/archives/smon-offline- ...

刘大,现在查出来是CDC的PURGE()引起的回滚段个数的增长,5分钟一次,但是SMON没有自己清理,

lunar 发表于 2013-12-4 20:14:03

试试 _smu_debug_mode=33554432

zhuang3088 发表于 2013-12-16 14:51:15

结下帖子,最终原因定位为dbms_cdc_publish.purge()中采用了并发处理机制,但是这个处理机制在这个数据库版本中存在BUG,使用并行度超过1时会重新申请回滚段,而不会去复用之前可利用的回滚段空间。最终导致每次执行函数,就会无限制增加会回滚段。
处理办法有两个:
1.执行前关闭并行度,设置参数并行参数为1
2.定期维护UNDO,重建或者手工管理,这个方法是我不太推荐的。
页: [1]
查看完整版本: 回滚段问题