學習動態效能表 第15 篇--V$ROLLSTAT 2007.6.12

shilei1發表於2012-04-09
一個回滾段可以存放多個事務的回滾資訊。
回滾段的作用
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 中的常用列
? USN:回滾段標識
? RSSIZE:回滾段預設大小
? XACTS:活動事務數
在一段時間內增量用到的列
? WRITES:回滾段寫入數(單位:bytes)
? SHRINKS:回滾段收縮次數
? EXTENDS:回滾段擴充套件次數
? WRAPS:回滾段翻轉(wrap)次數
? GETS:獲取回滾段頭次數
? 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
? 檢視回滾段的統計資訊:
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;
學習動態效能表
第16 篇--V$ROWCACHE 2007.6.12
本檢視顯示資料字典快取(也叫rowcache)的各項統計。每一條記錄包含不同型別的資料
字典快取資料統計,注意資料字典快取有層次差別,因此同樣的快取名稱可能不止一次出現。
V$ROWCACHE 常用列
? PARAMETER:快取名
? COUNT:快取項總數
? USAGE:包含有效資料的快取項數
? GETS:請求總數
? GETMISSES:請求失敗數
? SCANS:掃描請求數
? SCANMISSES:掃描請求失敗次數
? MODIFICATIONS:新增、修改、刪除運算元
? DLM_REQUESTS:DLM 請求數
? DLM_CONFLICTS:DLM 衝突數
? DLM_RELEASES:DLM 釋放數
使用 V$ROWCACHE 資料
1>.確認資料字典快取是否擁有適當的大小。如果shared pool 過小,那資料字典快取就
不足以擁有合適的大小以快取請求資訊。
2>.確認應用是否有效訪問快取。如果應用設計未能有效使用資料字典快取(比如,大數
據字典快取並不有助於解決效能問題)。例如,DC_USERS 快取在過去某段時期內出現
大量GETS,看起來像是資料庫中建立了大量的不同使用者,並且應用記錄下使用者頻繁登
陸和登出。透過檢查logon 比率以及系統使用者數可以驗證上述資料。同時解析比率也會
很高,如果這是一個大型的OLTP 系統的中間層,它可能在中間層更有效的管理個別帳
戶,允許中間層以單使用者登陸成為應用所有者。透過保持活動連線來減少logon/logoff
比率也同樣有效。
3>. 確認是否發生動態空間分配。DC_SEGMENTS, DC_USED_EXTENTS, 以及
DC_FREE_EXTENTS 大量的類似大小修改將指出存在大量動態空間分配。可行的解決
方案包括指定下一個區大小或者使用本地管理表空間。如果發生空間分配的是臨時的表
空間,則可以為其指定真正的臨時表空間(If the space allocation is occurring on the temp
tablespace, then use a true temporary tablespace for the temp. )。
4>.dc_sequences 值的變化指出是否大量sequence 號正在產生。
5>.蒐集硬解析的證據。硬解析常表現為大量向DC_COLUMNS, DC_VIEWS 以及
DC_OBJECTS caches 的gets。
示例:
1.分組統計資料字典統計項
SELECT parameter,sum("COUNT"),sum(usage),sum(gets),sum(getmisses),
sum(scans),sum(scanmisses),sum(modifications),
sum(dlm_requests),sum(dlm_conflicts),sum(dlm_releases)
FROM V$ROWCACHE
GROUP BY parameter;
2.檢查資料字典的命中率
select 1 - sum(getmisses) / sum(gets) "data dictionary hitratio" from
v$rowcache;
學習動態效能表
第17 篇-(1)-V$SEGSTAT 2007.6.13
本檢視實時監控段級(segment-level)統計項,支援oracle9ir2 及更高版本
V$SEGSTAT 中的常用列
? TS#:表空間標識
? OBJ#:字典物件標識
? DATAOBJ#:資料物件標識
? STATISTIC_NAME:統計項名稱
? STATISTIC#:統計項標識
? VALUE:統計項值
V$SEGSTAT 中的連線列
Column View Joined Column(s)
-------------- ----------------------- ------------------------
TS# V$TABLESPACE TS#
OBJ# ALL_OBJECTS OBJECT_ID
示例:
9. 查詢指定物件的統計
select * from v$segstat where ts# = 11
and obj# = (select object_id from user_objects
where object_name = 'TMPTABLE1' and wner = 'JSS')
第 17 篇-(2)-V$SEGMENT_STATISTICS 2007.6.13
這是一個友好的檢視,支援Oracle9ir2 及更高版本。實時監測段級(segment-level)統計項,
可用於鑑定效能問題源於表或索引
V$SEGMENT_STATISTICS 中的列
? OWNER:物件所有者
? OBJECT_NAME:物件名稱
? SUBOBJECT_NAME:子物件名稱
? TABLESPACE_NAME:物件所在表空間
? TS#:表空間標識
? OBJ#:字典物件標識
? DATAOBJ#:資料物件標識
? OBJECT_TYPE:物件型別
? STATISTIC_NAME:統計項名稱
? STATISTIC#:統計項標識
? VALUE:統計項值
基本與上相同,只是資訊更加詳細,不再贅述。
學習動態效能表
第18 篇--V$SYSTEM_EVENT 2007.6.13
本檢視概括了例項各項事件的等待資訊。v$session_wait 顯示了系統的當前等待項,
v$system_event 則提供了自例項啟動後各個等待事件的概括。常用於獲取系統等待資訊的歷
史影像。而透過兩個snapshot 獲取等待項增量,則可以確定這段時間內系統的等待項。
V$SYSTEM_EVENT 中的常用列
1. EVENT:等待事件名稱
2. TOTAL_WAITS:此項事件總等待次數
3. TIME_WAITED:此項事件的總等待時間(單位:百分之一秒)
4. AVERAGE_WAIT : 此項事件的平均等待用時( 單位: 百分之一
秒)(time_waited/total_waits)
5. TOTAL_TIMEOUTS:此項事情總等待超時次數
示例:
1.檢視系統的各項等待,按總耗時排序
SELECT event,total_waits waits,total_timeouts timeouts,
time_waited total_time,average_wait avg
FROM V$SYSTEM_EVENT
ORDER BY 4 DESC;
比如,透過checkpoint completed、log file switch(checkpoint incomplete)可以檢視檢查點進
程的效能。透過log file parallel write、log file switch completed 可以檢視聯機重做日誌檔案的
效能。透過log file switch(archiving needed)事件可以檢查歸檔程式的效能。
找出瓶頸:
1。透過Statspack 列出空閒事件。
2。檢查不同事件的等待時間開銷。
3。檢查每條等待記錄的平均用時,因為某些等待事件(比較log file switch completion)可能周
期性地發生,但發生時卻造成了嚴重的效能損耗。
學習動態效能表
第19 篇--V$UNDOSTAT 2007.6.14
本檢視監控當前例項中undo 空間以及事務如何執行。並統計undo 空間開銷,事務開銷
以及例項可用的查詢長度。
V$UNDOSTAT 中的常用列
? Endtime:以10 分鐘為間隔的結束時間
? UndoBlocksUsed:使用的undo 塊總數
? TxnConcurrency:事務併發執行的最大數
? TxnTotal:在時間段內事務執行總數
? QueryLength:查詢長度的最大值
? ExtentsStolen:在時間段內undo 區必須從一個undo 段轉到另一個的次數
? SSTooOldError:在時間段內'Snapshot Too Old'錯誤發生的次數
? UNDOTSN:這段時間內最後活動的undo 表空間ID
檢視的第一行顯示了當前時間段的統計,其它的每一條記錄分別以每10 分鐘一個區間。
24 小時迴圈,一天最多144 條記錄。
示例:
1.本例顯示undo 空間從16:27 到之前24 小時內的各項統計。
SQL>select * from v$undostat;
End-Time UndoBlocks TxnConcrcy TxnTotal QueryLen ExtentsStolen SSTooOldError
-------- ---------- ---------- -------- -------- ------------- -------------
16:07 252 15 1511 25 2 0
16:00 752 16 1467 150 0 0
15:50 873 21 1954 45 4 0
15:40 1187 45 3210 633 20 1
15:30 1120 28 2498 1202 5 0
15:20 882 22 2002 55 0 0
在統計項收集過程中,undo 消耗最高發生在15:30-15:40 這個時間段。10 分鐘內有1187 個
undo 塊被佔用(基本上每秒鐘2 個塊)。同時,最高事務併發也是在相同的時間段,45 個事
務被併發執行。執行的最長查詢(1202 秒)是在15:20-15:30 之間,需要注意的是查詢實際上
是15:00-15:10 段即開始並直到15:20 這個時間段。
學習動態效能表
第20 篇--V$WAITSTAT 2007.6.15
本檢視保持自例項啟動所有的等待事件統計資訊。常用於當你發現系統存在大量的
"buffer busy waits"時據此做出適當調整。
V$WAITSTAT 中的常用列
? CLASS:塊類別
? WAITS:本類塊的等待次數
? TIME:本類塊的總等待時間
等待發生的原因:
1.undo 段頭部:沒有足夠的回滾段
2.資料段頭部/資料段空閒列:空閒列爭奪
3.資料塊衝突
4.快取存在大量的CR 複製
5.range 檢索時,索引列存在大量不連續
6.全表檢索的表有大量被刪除記錄
7.高併發的讀寫塊

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

相關文章