天天看點

學習動态性能表 第十五篇--V$ROLLSTAT

學習動态性能表

第15篇--V$ROLLSTAT 

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

復原段概述

  復原段用于存放資料修改之前的值(包括資料修改之前的位置和值)。復原段的頭部包含正在使用的該復原段事務的資訊。一個事務隻能使用一個復原段來存放它的復原資訊,而一個復原段可以存放多個事務的復原資訊。

復原段的作用

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

  2。事務恢複:當事務正在處理的時候,例程失敗,復原段的資訊儲存在重做日志檔案中,ORACLE将在下次打開資料庫時利用復原來恢複未送出的資料。

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

事務級的讀一緻性

  ORACLE一般提供SQL語句級(SQL STATEMENT LEVEL)的讀一緻性,可以用以下語句來實作事務級的讀一緻性。

  SET TRANSACTION READ ONLY;

  或:

  SET TANNSACTION SERIALIZABLE;

  以上兩個語句都将在事務開始後提供讀一緻性。需要注意的是,使用第二個語句對資料庫的并發性和性能将帶來影響。

復原段的種類

  1。系統復原段:當資料庫建立後,将自動建立一個系統復原段,該復原段隻用于存放系統表空間中對象的前影像。

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

  3。DEFERED復原段:該復原段在表空間離線(OFFLINE)時由系統自動建立,當表空間再次線上(ONLINE)時由系統自動删除,用于存放表空間離線時産生的復原資訊。

復原段的使用

  配置設定復原段:當事務開始時,ORACLE将為該事務配置設定復原段,并将擁有最少事務的復原段配置設定給該事務。事務可以用以下語句申請指定的復原段:

  SET TRANSTRACTION USE ROLLBACK SEGMENT rollback_segment

  事務将以順序,循環的方式使用復原段的區(EXTENTS),當目前區用滿後移到下一個區。幾個事務可以寫在復原段的同一個區,但每個復原段的塊隻能包含一個事務的資訊。

  例如(兩個事務使用同一個復原段,該復原段有四個區):

  1、事務在進行中,它們正在使用復原段的第三個區;

  2、當兩個事務産生更多的復原資訊,它們将繼續使用第三個區;

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

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

復原段的擴張(EXTEND)

  當目前復原段區的所有塊用完而事務還需要更多的復原空間時,復原段的指針将移到下一個區。當最後一個區用完,指針将移到第一個區的前面。復原段指針移到下一個區的前提是下一個區沒有活動的事務,同時指針不能跨區。當下一個區正在使用時,事務将為復原段配置設定一個新的區,這種配置設定稱為復原段的擴充。復原段将一直擴充到該復原段區的個數到達復原段的參數MAXEXTENTS的值時為止。

復原段的回收和OPTIMAL參數

  OPTIMAL參數指明復原段空閑時收縮到的位置,指明復原段的OPTIMAL參數可以減少復原段空間的浪費。

V$ROLLSTAT中的常用列

l         USN:復原段辨別

l         RSSIZE:復原段預設大小

l         XACTS:活動事務數

在一段時間内增量用到的列

l         WRITES:復原段寫入數(機關:bytes)

l         SHRINKS:復原段收縮次數

l         EXTENDS:復原段擴充次數

l         WRAPS:復原段翻轉(wrap)次數

l         GETS:擷取復原段頭次數

l         WAITS:復原段頭等待次數

V$ROLLSTAT中的連接配接列

Column                                    View                                        Joined Column(s)

--------------                               -----------------------                   ------------------------

USN                                V$ROLLNAME                 USN

注意:

  通過花費時間除以翻轉次數,你可以得到一次復原段翻轉(wrap)的平均用時。此方法常用于在長查詢中指定合适的復原段大小以避免'Snapshot Too Old'錯誤。同時,通過檢視extends和shrinks列可以看出optimal是否需要增加。

示例:

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

 orderby s.username;