關於undo表空間大小設定的討論

http://407882.blog.51cto.com/397882/107420 

 

1.undo_retention值越大,需要的undo表空間越大

         undo_retention值表示一個undo數據塊最久能在undo表空間中停留的時間,單位是秒,缺省值爲900。(問:如果已經超過了這個時間,而事務還麼有提交,此時該undo數據塊可以被覆蓋嗎?)
         undo表空間資源是循環使用的,在undo_retention時間內,undo數據塊的內容是不會被釋放掉,也即不會被新的undo數據覆蓋。所以設置停留時間越久,undo表空間就越大。
 
2.工作量很大,業務量大,事務很多時,每秒鐘所產生undo數據塊的個數越多,需要的undo表空間越大。
 
3.和db_block_size的大小有關
  select begin_time,end_time,undoblks
    from v$undostat;
  
  BEGIN_TIME           END_TEME             UNDOBLKS
  ------------------  -------------------  ----------
  28-SEP-O8 13:43:02  28-SEP-O8 13:44:18        19
  28-SEP-O8 13:33:02  28-SEP-O8 13:43:18      1474
  28-SEP-O8 13:23:02  28-SEP-O8 13:33:18      1347
  28-SEP-O8 13:13:02  28-SEP-O8 13:23:18      16 28
        此語句記錄了undo數據塊的歷史使用情況,每隔10分鐘刷一次。此結果表示記錄前40分鐘分別用到undo數據塊19個、1474個、1347個、1628個;
  select addr,used_ublk
    from v$transaction;
  
  ADDR         USED_UBLK
 ---------   --------------
 5932F4A0           863

    此語句可以查看當前事務所需要數據塊的個數,此結果表示,當前用戶只有一個事務正在執行,此事務需要863個undo數據塊。
    事務越多,操作影響數據越多,需要的undo數據塊也越多。
 
如何計算所需undo表空間的大小:
1.計算業務高峯期每秒產生undo數據塊的個數:
SQL> select max(undoblks / ((end_time - begin_time)*24*3600)) 
SQL>  from undostat;
2.得到undo數據塊在undo表空間中可以保留的最長時間
show parameter undo_retention
3.得到數據塊大小
show parameter db_block;
4.將以上三者的數據相乘就是所需undo表空間的大小數。
 
發現undo表空間不夠的時候,趕緊增加undo表空間的大小,執行語句如下:
alter tablespace undotbs
  add datafile '/u01/oradata/undotbs2.dbf' size 700M
  autoextend on;
 
ORA-01555
  查詢失敗,其他事務產生的undo數據覆蓋了undo表空間中查詢需要的old數據塊。
---------------------------------------------------------------------------------------------------------------------
刪除undo tablespace實驗:
SQL> create undo tablespace undotbs2 
  2  datafile '/opt/oradata/oradata/orcl/undotbs02.dbf' SIZE 100m
  3  autoextend off;

Tablespace created.

SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                 string      AUTO
undo_retention                       integer     10800
undo_suppress_errors        boolean     FALSE
undo_tablespace                    string      UNDOTBS1

SQL> alter system set undo_tablespace=UNDOTBS2 scope=both;

System altered.

SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     10800
undo_suppress_errors                 boolean     FALSE
undo_tablespace                      string      UNDOTBS2

SQL> select segment_name ,tablespace_name ,segment_id from dba_rollback_segs;

SEGMENT_NAME                   TABLESPACE_NAME                SEGMENT_ID
------------------------------ ------------------------------ ----------
SYSTEM                         SYSTEM                                  0
_SYSSMU1$                      UNDOTBS1                                1
_SYSSMU2$                      UNDOTBS1                                2
_SYSSMU3$                      UNDOTBS1                                3
_SYSSMU4$                      UNDOTBS1                                4
_SYSSMU5$                      UNDOTBS1                                5
_SYSSMU6$                      UNDOTBS1                                6
_SYSSMU7$                      UNDOTBS1                                7
_SYSSMU8$                      UNDOTBS1                                8
_SYSSMU9$                      UNDOTBS1                                9
_SYSSMU10$                     UNDOTBS1                               10

SEGMENT_NAME                   TABLESPACE_NAME                SEGMENT_ID
------------------------------ ------------------------------ ----------
_SYSSMU11$                     UNDOTBS2                               11
_SYSSMU12$                     UNDOTBS2                               12
_SYSSMU13$                     UNDOTBS2                               13
_SYSSMU14$                     UNDOTBS2                               14
_SYSSMU15$                     UNDOTBS2                               15
_SYSSMU16$                     UNDOTBS2                               16
_SYSSMU17$                     UNDOTBS2                               17
_SYSSMU18$                     UNDOTBS2                               18
_SYSSMU19$                     UNDOTBS2                               19
_SYSSMU20$                     UNDOTBS2                               20

21 rows selected.

SQL> select usn,status,xacts from v$rollstat;

       USN         STATUS               XACTS
-------------   ---------------             -------------
         0               ONLINE                   0
        10   PENDING OFFLINE          1
        11              ONLINE                   0
        12              ONLINE                   0
        13              ONLINE                   0
        14              ONLINE                   0
        15              ONLINE                   0
        16              ONLINE                   0
        17              ONLINE                   0
        18              ONLINE                   0
        19              ONLINE                   1

       USN         STATUS               XACTS
-------------   ---------------             -------------
        20              ONLINE                   0

12 rows selected.

發現原UNDOTBS1的回滾段處於PENDING OFFLINE狀態,並有一個事物存在,需要等到事務完成後,才能drop UNDOTBS1

SQL> select usn,status,xacts from v$rollstat;

       USN         STATUS               XACTS
-------------   ---------------             -------------
         0               ONLINE                   0
        10   PENDING OFFLINE          0
        11              ONLINE                   0
        12              ONLINE                   0
        13              ONLINE                   0
        14              ONLINE                   0
        15              ONLINE                   0
        16              ONLINE                   0
        17              ONLINE                   0
        18              ONLINE                   0
        19              ONLINE                   1

       USN         STATUS               XACTS
-------------   ---------------             -------------
        20              ONLINE                   0

12 rows selected.

SQL> select usn,status,xacts from v$rollstat;

       USN         STATUS               XACTS
-------------   ---------------             -------------
         0              ONLINE                   0
        11              ONLINE                   0
        12              ONLINE                   0
        13              ONLINE                   0
        14              ONLINE                   0
        15              ONLINE                   0
        16              ONLINE                   0
        17              ONLINE                   0
        18              ONLINE                   0
        19              ONLINE                   1
        20              ONLINE                   0

11 rows selected.

SQL> drop tablespace undotbs1 including contents and datafiles;

Tablespace dropped.

SQL>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章