gdufo

           

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


          一個回滾段可以存放多個事務的回滾信息。
          回滾段的作用
          1。事務回滾:當事務修改表中數據的時候,該數據修改前的值(即前影像)會存放在
          回滾段中,當用戶回滾事務(ROLLBACK)時,ORACLE 將會利用回滾段中的數據前影像
          來將修改的數據恢復到原來的值。
          2。事務恢復:當事務正在處理的時候,例程失敗,回滾段的信息保存在重做日志文件
          中,ORACLE 將在下次打開數據庫時利用回滾來恢復未提交的數據。
          3。讀一致性:當一個會話正在修改數據時,其他的會話將看不到該會話未提交的修改。
          而且,當一個語句正在執行時,該語句將看不到從該語句開始執行后的未提交的修改(語句
          級讀一致性)。當ORACLE 執行SELECT 語句時,ORACLE 依照當前的系統改變號(SYSTEM
          CHANGE NUMBER-SCN)來保證任何前于當前SCN 的未提交的改變不被該語句處理???br /> 以想象:當一個長時間的查詢正在執行時,若其他會話改變了該查詢要查詢的某個數據塊,
          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)
          當當前回滾段區的所有塊用完而事務還需要更多的回滾空間時,回滾段的指針將移到下
          一個區。當最后一個區用完,指針將移到第一個區的前面。回滾段指針移到下一個區的前提
          是下一個區沒有活動的事務,同時指針不能跨區。當下一個區正在使用時,事務將為回滾段
          分配一個新的區,這種分配稱為回滾段的擴展?;貪L段將一直擴展到該回滾段區的個數到達
          回滾段的參數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 大量的類似大小修改將指出存在大量動態空間分配??尚械慕鉀Q
          方案包括指定下一個區大小或者使用本地管理表空間。如果發生空間分配的是臨時的表
          空間,則可以為其指定真正的臨時表空間(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 owner = '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.高并發的讀寫塊

          posted on 2009-11-17 14:43 gdufo 閱讀(396) 評論(0)  編輯  收藏 所屬分類: Database (oracle, sqlser,MYSQL)

          導航

          統計

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Hibernate

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 五台县| 兴宁市| 新乡县| 林甸县| 溧水县| 于田县| 兰西县| 三江| 舞钢市| 塔城市| 东阿县| 赤壁市| 阿瓦提县| 句容市| 大关县| 西吉县| 邯郸市| 马公市| 密云县| 沙湾县| 南开区| 广河县| 东光县| 鲁甸县| 旺苍县| 五河县| 鄂尔多斯市| 上高县| 白城市| 清苑县| 县级市| 和平县| 张家港市| 宜兰县| 丹棱县| 乌海市| 双峰县| 武定县| 出国| 怀远县| 鄢陵县|