學習動态性能表
第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;