Oracle動態效能檢視學習筆記(4)_v$rollstat

gdutllf2006發表於2010-07-26
Oracle動態效能檢視學習筆記(4)_v$rollstat


參考文件<>Chapter 24
三思君的筆記


##################################################################
1 Overview
##################################################################
This view keeps a summary of statistics for each rollback segment since startup;

本檢視自啟動即保持並記錄各回滾段統計項。在學習本檢視之前,我們先來了解一下回滾段(rollback segment)的相關概念:

1.1 回滾段概述
  回滾段用於存放資料修改之前的值(包括資料修改之前的位置和值)。回滾段的頭部包含正在使用的該回滾段事務的資訊。一個事務只能使用一個回滾段來存放它的回滾資訊,而一個回滾段可以存放多個事務的回滾資訊。

1.2 回滾段的作用
  1。事務回滾:當事務修改表中資料的時候,該資料修改前的值(即前影像)會存放在回滾段中,當使用者回滾事務(ROLLBACK)時,ORACLE將會利用回滾段中的資料前影像來將修改的資料恢復到原來的值。

  2。事務恢復:當事務正在處理的時候,例程失敗,回滾段的資訊儲存在重做日誌檔案中,ORACLE將在下次開啟資料庫時利用回滾來恢復未提交的資料。

  3。讀一致性:當一個會話正在修改資料時,其他的會話將看不到該會話未提交的修改。而且,當一個語句正在執行時,該語句將看不到從該語句開始執行後的未提交的修改(語句級讀一致性)。當ORACLE執行SELECT語句時,ORACLE依照當前的系統改變號(SYSTEM CHANGE NUMBER-SCN)來保證任何前於當前SCN的未提交的改變不被該語句處理。可以想象:當一個長時間的查詢正在執行時,若其他會話改變了該查詢要查詢的某個資料塊,ORACLE將利用回滾段的資料前影像來構造一個讀一致性檢視。

1.3 事務級的讀一致性
  ORACLE一般提供SQL語句級(SQL STATEMENT LEVEL)的讀一致性,可以用以下語句來實現事務級的讀一致性。
  SET TRANSACTION READ ONLY;
  或:
  SET TANNSACTION SERIALIZABLE;
  以上兩個語句都將在事務開始後提供讀一致性。需要注意的是,使用第二個語句對資料庫的併發性和效能將帶來影響。

1.4 回滾段的種類
  1。系統回滾段:當資料庫建立後,將自動建立一個系統回滾段,該回滾段只用於存放系統表空間中物件的前影像。

  2。非系統回滾段:擁有多個表空間的資料庫至少應該有一個非系統回滾段,用於存放非系統表空間中物件的資料前影像。非系統回滾段又分為私有回滾段和公有回滾段,私有回滾段應在引數檔案的ROLLBACK SEGMENTS引數中列出,以便例程啟動時自動使其線上(ONLINE)。公有回滾段一般在OPS(ORACLE並行伺服器)中出現,將在例程啟動時自動線上。

  3。DEFERED回滾段:該回滾段在表空間離線(OFFLINE)時由系統自動建立,當表空間再次線上(ONLINE)時由系統自動刪除,用於存放表空間離線時產生的回滾資訊。

1.5 回滾段的使用
  分配回滾段:當事務開始時,ORACLE將為該事務分配回滾段,並將擁有最少事務的回滾段分配給該事務。
   
    事務可以用以下語句申請指定的回滾段:
  SET TRANSTRACTION USE ROLLBACK SEGMENT rollback_segment

  事務將以順序,迴圈的方式使用回滾段的區(EXTENTS),噹噹前區用滿後移到下一個區。幾個事務可以寫在回滾段的同一個區,但每個回滾段區中的塊只能包含一個事務的資訊。
  例如(兩個事務使用同一個回滾段,該回滾段有四個區):
  1、事務在進行中,它們正在使用回滾段的第三個區;

  2、當兩個事務產生更多的回滾資訊,它們將繼續使用第三個區;

  3、當第三個區滿後,事務將寫到第四個區,當事務開始寫到一個新的區時,稱為翻轉(WRAP);

  4、當第四個區用滿時,如果第一個區是空閒或非活動(使用該區的所有事務完成而沒有活動的事務)的,事務將接著使用第一個區。

1.6 回滾段的擴張(EXTEND)
  噹噹前回滾段區的所有塊用完而事務還需要更多的回滾空間時,回滾段的指標將移到下一個區。當最後一個區用完,指標將移到第一個區的前面。回滾段指標移到下一個區的前提是下一個區沒有活動的事務,同時指標不能跨區。當下一個區正在使用時,事務將為回滾段分配一個新的區,這種分配稱為回滾段的擴充套件。回滾段將一直擴充套件到該回滾段區的個數到達回滾段的引數MAXEXTENTS的值時為止。

1.7 回滾段的回收和OPTIMAL引數
  OPTIMAL引數指明回滾段空閒時收縮到的位置,指明回滾段的OPTIMAL引數可以減少回滾段空間的浪費。


##################################################################
2 Useful Columns for v$undostat
##################################################################
1) USN: Rollback segment number

2) RSSIZE: Current size fo the rollback segment

3) XACTS: Number of active transactions

Columns Useful for Doing a Delta Over a Period of Time
1) WRITES: Number of bytes written to the rollback segment
(寫到回滾段的位元組數)

2) SHRINKS: Number of times the rollback segment grew past OPTIMAL and shrank back.
(回滾段收縮的次數)

3) WRAPS: Number of times the rollback segment wrapped around.
(回滾段出現翻轉的次數)

4) GETS: Number of header gets
(獲取回滾段頭次數)

5) WAITS: Number of header waits
(回滾段頭等待次數)

6) HWMSIZE: High water mark of rollback segment size
(回滾段的高水位)

JOIN COLUMNS FOR V$ROLLSTAT

SQL> desc V$ROLLNAME
Name Type         Nullable Default Comments
---- ------------ -------- ------- --------
USN  NUMBER       Y                        
NAME VARCHAR2(30)

select  b.name,a.* from v$rollstat a , v$rollname b
where a.usn = b.usn;


By dividing the elapsed time by wraps, you can determine the average time taken for a rollback segment to wrap.
This is useful in sizing rollback segments for long running queries to avoid 'Snapshot Too Old' erros.


##################################################################
3 示例
##################################################################
1.查詢回滾段的資訊。所用資料字典:DBA_ROLLBACK_SEGS,可以查詢的資訊:回滾段的標識(SEGMENT_ID)、名稱(SEGMENT_NAME)、所在表空間(TABLESPACE_NAME)、型別(OWNER)、狀態(STATUS)。
select * from DBA_ROLLBACK_SEGS

2.檢視回滾段的統計資訊:
SELECT n.name, s.extents, s.rssize, s.optsize, s.hwmsize, s.xacts, s.status
  FROM v$rollname n, v$rollstat s
 WHERE n.usn = s.usn;

3.檢視回滾段的使用情況,哪個使用者正在使用回滾段的資源:
select s.username, u.name
  from v$transaction t, v$rollstat r, v$rollname u, v$session s
 where s.taddr = t.addr
   and t.xidusn = r.usn
   and r.usn = u.usn
 order by s.username;


開始一個事務:

SQL> delete from big_table where rownum < 11;

10 rows deleted

檢視這個事務所使用的Undo Segment回滾段:

SQL> select s.username, u.name
  2    from v$transaction t, v$rollstat r, v$rollname u, v$session s
  3   where s.taddr = t.addr
  4     and t.xidusn = r.usn
  5     and r.usn = u.usn
  6   order by s.username;

USERNAME                       NAME
------------------------------ ------------------------------
GZDC                           _SYSSMU15$

檢視這個回滾段的Extent情況。

SQL> select SEGMENT_NAME,TABLESPACE_NAME,EXTENT_ID,BYTES,BYTES,BLOCKS from dba_extents  where SEGMENT_NAME='_SYSSMU15$';

SEGMENT_NAME                                                                     TABLESPACE_NAME                 EXTENT_ID      BYTES      BYTES     BLOCKS
-------------------------------------------------------------------------------- ------------------------------ ---------- ---------- ---------- ----------
_SYSSMU15$                                                                       UNDOTBS2                                0      57344      57344          7
_SYSSMU15$                                                                       UNDOTBS2                                1      65536      65536          8
_SYSSMU15$                                                                       UNDOTBS2                                2      65536      65536          8
_SYSSMU15$                                                                       UNDOTBS2                                3      65536      65536          8
_SYSSMU15$                                                                       UNDOTBS2                                4      65536      65536          8
_SYSSMU15$                                                                       UNDOTBS2                                5      65536      65536          8
_SYSSMU15$                                                                       UNDOTBS2                                6      65536      65536          8
_SYSSMU15$                                                                       UNDOTBS2                                7      65536      65536          8


##################################################################
4 問題
##################################################################
1 回滾段與undo表空間中的undo segment的關係?
回滾段即undo segment, 來自於undo表空間。


2 事務與回滾段間的關係?
多個事務可以共享回滾段,甚至共享同一個回滾段的同一個Extent,但區內的Block不能共享。

回滾段的頭部記錄了使用這個回滾段的事務的資訊。






































 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10248702/viewspace-669515/,如需轉載,請註明出處,否則將追究法律責任。

相關文章