學習動態(tài)性能表 第15 篇--V$ROLLSTAT 2007.6.12
一個回滾段可以存放多個事務的回滾信息。
回滾段的作用
1。事務回滾:當事務修改表中數(shù)據(jù)的時候,該數(shù)據(jù)修改前的值(即前影像)會存放在
回滾段中,當用戶回滾事務(ROLLBACK)時,ORACLE 將會利用回滾段中的數(shù)據(jù)前影像
來將修改的數(shù)據(jù)恢復到原來的值。
2。事務恢復:當事務正在處理的時候,例程失敗,回滾段的信息保存在重做日志文件
中,ORACLE 將在下次打開數(shù)據(jù)庫時利用回滾來恢復未提交的數(shù)據(jù)。
3。讀一致性:當一個會話正在修改數(shù)據(jù)時,其他的會話將看不到該會話未提交的修改。
而且,當一個語句正在執(zhí)行時,該語句將看不到從該語句開始執(zhí)行后的未提交的修改(語句
級讀一致性)。當ORACLE 執(zhí)行SELECT 語句時,ORACLE 依照當前的系統(tǒng)改變號(SYSTEM
CHANGE NUMBER-SCN)來保證任何前于當前SCN 的未提交的改變不被該語句處理。可
以想象:當一個長時間的查詢正在執(zhí)行時,若其他會話改變了該查詢要查詢的某個數(shù)據(jù)塊,
ORACLE 將利用回滾段的數(shù)據(jù)前影像來構造一個讀一致性視圖。
事務級的讀一致性
ORACLE 一般提供SQL 語句級(SQL STATEMENT LEVEL)的讀一致性,可以用以下
語句來實現(xiàn)事務級的讀一致性。
SET TRANSACTION READ ONLY;
或:
SET TANNSACTION SERIALIZABLE;
以上兩個語句都將在事務開始后提供讀一致性。需要注意的是,使用第二個語句對數(shù)據(jù)
庫的并發(fā)性和性能將帶來影響。
回滾段的種類
1。系統(tǒng)回滾段:當數(shù)據(jù)庫創(chuàng)建后,將自動創(chuàng)建一個系統(tǒng)回滾段,該回滾段只用于存放
系統(tǒng)表空間中對象的前影像。
2。非系統(tǒng)回滾段:擁有多個表空間的數(shù)據(jù)庫至少應該有一個非系統(tǒng)回滾段,用于存放
非系統(tǒng)表空間中對象的數(shù)據(jù)前影像。非系統(tǒng)回滾段又分為私有回滾段和公有回滾段,私有回
滾段應在參數(shù)文件的ROLLBACK SEGMENTS 參數(shù)中列出,以便例程啟動時自動使其在線
(ONLINE)。公有回滾段一般在OPS(ORACLE 并行服務器)中出現(xiàn),將在例程啟動時自
動在線。
3。DEFERED 回滾段:該回滾段在表空間離線(OFFLINE)時由系統(tǒng)自動創(chuàng)建,當表
空間再次在線(ONLINE)時由系統(tǒng)自動刪除,用于存放表空間離線時產生的回滾信息。
回滾段的使用
分配回滾段:當事務開始時,ORACLE 將為該事務分配回滾段,并將擁有最少事務的
回滾段分配給該事務。事務可以用以下語句申請指定的回滾段:
SET TRANSTRACTION USE ROLLBACK SEGMENT rollback_segment
事務將以順序,循環(huán)的方式使用回滾段的區(qū)(EXTENTS),當當前區(qū)用滿后移到下一個
區(qū)。幾個事務可以寫在回滾段的同一個區(qū),但每個回滾段的塊只能包含一個事務的信息。
例如(兩個事務使用同一個回滾段,該回滾段有四個區(qū)):
1、事務在進行中,它們正在使用回滾段的第三個區(qū);
2、當兩個事務產生更多的回滾信息,它們將繼續(xù)使用第三個區(qū);
3、當?shù)谌齻€區(qū)滿后,事務將寫到第四個區(qū),當事務開始寫到一個新的區(qū)時,稱為翻轉
(WRAP);
4、當?shù)谒膫€區(qū)用滿時,如果第一個區(qū)是空閑或非活動(使用該區(qū)的所有事務完成而沒
有活動的事務)的,事務將接著使用第一個區(qū)。
回滾段的擴張(EXTEND)
當當前回滾段區(qū)的所有塊用完而事務還需要更多的回滾空間時,回滾段的指針將移到下
一個區(qū)。當最后一個區(qū)用完,指針將移到第一個區(qū)的前面。回滾段指針移到下一個區(qū)的前提
是下一個區(qū)沒有活動的事務,同時指針不能跨區(qū)。當下一個區(qū)正在使用時,事務將為回滾段
分配一個新的區(qū),這種分配稱為回滾段的擴展。回滾段將一直擴展到該回滾段區(qū)的個數(shù)到達
回滾段的參數(shù)MAXEXTENTS 的值時為止。
回滾段的回收和OPTIMAL 參數(shù)
OPTIMAL 參數(shù)指明回滾段空閑時收縮到的位置,指明回滾段的OPTIMAL 參數(shù)可以減
少回滾段空間的浪費。
V$ROLLSTAT 中的常用列
?? USN:回滾段標識
?? RSSIZE:回滾段默認大小
?? XACTS:活動事務數(shù)
在一段時間內增量用到的列
?? WRITES:回滾段寫入數(shù)(單位:bytes)
?? SHRINKS:回滾段收縮次數(shù)
?? EXTENDS:回滾段擴展次數(shù)
?? WRAPS:回滾段翻轉(wrap)次數(shù)
?? GETS:獲取回滾段頭次數(shù)
?? WAITS:回滾段頭等待次數(shù)
V$ROLLSTAT 中的連接列
Column View Joined Column(s)
-------------- ----------------------- ------------------------
USN V$ROLLNAME USN
注意:
通過花費時間除以翻轉次數(shù),你可以得到一次回滾段翻轉(wrap)的平均用時。此方法常
用于在長查詢中指定合適的回滾段大小以避免'Snapshot Too Old'錯誤。同時,通過查看
extends 和shrinks 列可以看出optimal 是否需要增加。
示例:
1.查詢回滾段的信息。所用數(shù)據(jù)字典:DBA_ROLLBACK_SEGS,可以查詢的信息:回滾段
的標識(SEGMENT_ID)、名稱(SEGMENT_NAME)、所在表空間(TABLESPACE_NAME)、類
型(OWNER)、狀態(tài)(STATUS)。
select * from DBA_ROLLBACK_SEGS
?? 查看回滾段的統(tǒng)計信息:
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;
學習動態(tài)性能表
第16 篇--V$ROWCACHE 2007.6.12
本視圖顯示數(shù)據(jù)字典緩存(也叫rowcache)的各項統(tǒng)計。每一條記錄包含不同類型的數(shù)據(jù)
字典緩存數(shù)據(jù)統(tǒng)計,注意數(shù)據(jù)字典緩存有層次差別,因此同樣的緩存名稱可能不止一次出現(xiàn)。
V$ROWCACHE 常用列
?? PARAMETER:緩存名
?? COUNT:緩存項總數(shù)
?? USAGE:包含有效數(shù)據(jù)的緩存項數(shù)
?? GETS:請求總數(shù)
?? GETMISSES:請求失敗數(shù)
?? SCANS:掃描請求數(shù)
?? SCANMISSES:掃描請求失敗次數(shù)
?? MODIFICATIONS:添加、修改、刪除操作數(shù)
?? DLM_REQUESTS:DLM 請求數(shù)
?? DLM_CONFLICTS:DLM 沖突數(shù)
?? DLM_RELEASES:DLM 釋放數(shù)
使用 V$ROWCACHE 數(shù)據(jù)
1>.確認數(shù)據(jù)字典緩存是否擁有適當?shù)拇笮 H绻鹲hared pool 過小,那數(shù)據(jù)字典緩存就
不足以擁有合適的大小以緩存請求信息。
2>.確認應用是否有效訪問緩存。如果應用設計未能有效使用數(shù)據(jù)字典緩存(比如,大數(shù)
據(jù)字典緩存并不有助于解決性能問題)。例如,DC_USERS 緩存在過去某段時期內出現(xiàn)
大量GETS,看起來像是數(shù)據(jù)庫中創(chuàng)建了大量的不同用戶,并且應用記錄下用戶頻繁登
陸和注銷。通過檢查logon 比率以及系統(tǒng)用戶數(shù)可以驗證上述數(shù)據(jù)。同時解析比率也會
很高,如果這是一個大型的OLTP 系統(tǒng)的中間層,它可能在中間層更有效的管理個別帳
戶,允許中間層以單用戶登陸成為應用所有者。通過保持活動連接來減少logon/logoff
比率也同樣有效。
3>. 確認是否發(fā)生動態(tài)空間分配。DC_SEGMENTS, DC_USED_EXTENTS, 以及
DC_FREE_EXTENTS 大量的類似大小修改將指出存在大量動態(tài)空間分配。可行的解決
方案包括指定下一個區(qū)大小或者使用本地管理表空間。如果發(fā)生空間分配的是臨時的表
空間,則可以為其指定真正的臨時表空間(If the space allocation is occurring on the temp
tablespace, then use a true temporary tablespace for the temp. )。
4>.dc_sequences 值的變化指出是否大量sequence 號正在產生。
5>.搜集硬解析的證據(jù)。硬解析常表現(xiàn)為大量向DC_COLUMNS, DC_VIEWS 以及
DC_OBJECTS caches 的gets。
示例:
1.分組統(tǒng)計數(shù)據(jù)字典統(tǒng)計項
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.檢查數(shù)據(jù)字典的命中率
select 1 - sum(getmisses) / sum(gets) "data dictionary hitratio" from
v$rowcache;
學習動態(tài)性能表
第17 篇-(1)-V$SEGSTAT 2007.6.13
本視圖實時監(jiān)控段級(segment-level)統(tǒng)計項,支持oracle9ir2 及更高版本
V$SEGSTAT 中的常用列
?? TS#:表空間標識
?? OBJ#:字典對象標識
?? DATAOBJ#:數(shù)據(jù)對象標識
?? STATISTIC_NAME:統(tǒng)計項名稱
?? STATISTIC#:統(tǒng)計項標識
?? VALUE:統(tǒng)計項值
V$SEGSTAT 中的連接列
Column View Joined Column(s)
-------------- ----------------------- ------------------------
TS# V$TABLESPACE TS#
OBJ# ALL_OBJECTS OBJECT_ID
示例:
9. 查詢指定對象的統(tǒng)計
select * from v$segstat where ts# = 11
and obj# = (select object_id from user_objects
where object_name = 'TMPTABLE1' and owner = 'JSS')
第 17 篇-(2)-V$SEGMENT_STATISTICS 2007.6.13
這是一個友好的視圖,支持Oracle9ir2 及更高版本。實時監(jiān)測段級(segment-level)統(tǒng)計項,
可用于鑒定性能問題源于表或索引
V$SEGMENT_STATISTICS 中的列
?? OWNER:對象所有者
?? OBJECT_NAME:對象名稱
?? SUBOBJECT_NAME:子對象名稱
?? TABLESPACE_NAME:對象所在表空間
?? TS#:表空間標識
?? OBJ#:字典對象標識
?? DATAOBJ#:數(shù)據(jù)對象標識
?? OBJECT_TYPE:對象類型
?? STATISTIC_NAME:統(tǒng)計項名稱
?? STATISTIC#:統(tǒng)計項標識
?? VALUE:統(tǒng)計項值
基本與上相同,只是信息更加詳細,不再贅述。
學習動態(tài)性能表
第18 篇--V$SYSTEM_EVENT 2007.6.13
本視圖概括了實例各項事件的等待信息。v$session_wait 顯示了系統(tǒng)的當前等待項,
v$system_event 則提供了自實例啟動后各個等待事件的概括。常用于獲取系統(tǒng)等待信息的歷
史影象。而通過兩個snapshot 獲取等待項增量,則可以確定這段時間內系統(tǒng)的等待項。
V$SYSTEM_EVENT 中的常用列
1. EVENT:等待事件名稱
2. TOTAL_WAITS:此項事件總等待次數(shù)
3. TIME_WAITED:此項事件的總等待時間(單位:百分之一秒)
4. AVERAGE_WAIT : 此項事件的平均等待用時( 單位: 百分之一
秒)(time_waited/total_waits)
5. TOTAL_TIMEOUTS:此項事情總等待超時次數(shù)
示例:
1.查看系統(tǒng)的各項等待,按總耗時排序
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 可以查看聯(lián)機重做日志文件的
性能。通過log file switch(archiving needed)事件可以檢查歸檔進程的性能。
找出瓶頸:
1。通過Statspack 列出空閑事件。
2。檢查不同事件的等待時間開銷。
3。檢查每條等待記錄的平均用時,因為某些等待事件(比較log file switch completion)可能周
期性地發(fā)生,但發(fā)生時卻造成了嚴重的性能損耗。
學習動態(tài)性能表
第19 篇--V$UNDOSTAT 2007.6.14
本視圖監(jiān)控當前實例中undo 空間以及事務如何運行。并統(tǒng)計undo 空間開銷,事務開銷
以及實例可用的查詢長度。
V$UNDOSTAT 中的常用列
?? Endtime:以10 分鐘為間隔的結束時間
?? UndoBlocksUsed:使用的undo 塊總數(shù)
?? TxnConcurrency:事務并發(fā)執(zhí)行的最大數(shù)
?? TxnTotal:在時間段內事務執(zhí)行總數(shù)
?? QueryLength:查詢長度的最大值
?? ExtentsStolen:在時間段內undo 區(qū)必須從一個undo 段轉到另一個的次數(shù)
?? SSTooOldError:在時間段內'Snapshot Too Old'錯誤發(fā)生的次數(shù)
?? UNDOTSN:這段時間內最后活動的undo 表空間ID
視圖的第一行顯示了當前時間段的統(tǒng)計,其它的每一條記錄分別以每10 分鐘一個區(qū)間。
24 小時循環(huán),一天最多144 條記錄。
示例:
1.本例顯示undo 空間從16:27 到之前24 小時內的各項統(tǒng)計。
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
在統(tǒng)計項收集過程中,undo 消耗最高發(fā)生在15:30-15:40 這個時間段。10 分鐘內有1187 個
undo 塊被占用(基本上每秒鐘2 個塊)。同時,最高事務并發(fā)也是在相同的時間段,45 個事
務被并發(fā)執(zhí)行。執(zhí)行的最長查詢(1202 秒)是在15:20-15:30 之間,需要注意的是查詢實際上
是15:00-15:10 段即開始并直到15:20 這個時間段。
學習動態(tài)性能表
第20 篇--V$WAITSTAT 2007.6.15
本視圖保持自實例啟動所有的等待事件統(tǒng)計信息。常用于當你發(fā)現(xiàn)系統(tǒng)存在大量的
"buffer busy waits"時據(jù)此做出適當調整。
V$WAITSTAT 中的常用列
?? CLASS:塊類別
?? WAITS:本類塊的等待次數(shù)
?? TIME:本類塊的總等待時間
等待發(fā)生的原因:
1.undo 段頭部:沒有足夠的回滾段
2.數(shù)據(jù)段頭部/數(shù)據(jù)段空閑列:空閑列爭奪
3.數(shù)據(jù)塊沖突
4.緩存存在大量的CR 復制
5.range 檢索時,索引列存在大量不連續(xù)
6.全表檢索的表有大量被刪除記錄
7.高并發(fā)的讀寫塊
posted on 2009-11-17 14:43 gdufo 閱讀(395) 評論(0) 編輯 收藏 所屬分類: Database (oracle, sqlser,MYSQL)