(6)查看AWR視圖 |
[君三思] 2009-11-5 |
三、查看AWR視圖不管是EM也好,或是前面演示中使用的awr*.sql腳本也好,實(shí)質(zhì)都是訪問(wèn)ORACLE中的部分相關(guān)視圖來(lái)生成統(tǒng)計(jì)數(shù)據(jù),因此如果DBA對(duì)自己的理解能力有足夠的自信,也可以直接查詢動(dòng)態(tài)性能視圖(或相關(guān)數(shù)據(jù)字典)的方式來(lái)獲取自己想要的那部分性能數(shù)據(jù)。ORACLE將這部分性能統(tǒng)計(jì)數(shù)據(jù)保存在DBA_HIST開(kāi)頭的數(shù)據(jù)字典中,要查詢當(dāng)前實(shí)例所有能夠訪問(wèn)的DBA_HIST字典,可以通過(guò)下列語(yǔ)句: SQL> select * from dict where table_name like ¨DBA_HIST%¨; TABLE_NAME COMMENTS ------------------------------ -------------------------------------------------------------------------------- DBA_HIST_DATABASE_INSTANCE Database Instance Information DBA_HIST_SNAPSHOT Snapshot Information DBA_HIST_SNAP_ERROR Snapshot Error Information DBA_HIST_BASELINE Baseline Metadata Information DBA_HIST_WR_CONTROL Workload Repository Control Information DBA_HIST_DATAFILE Names of Datafiles DBA_HIST_FILESTATXS Datafile Historical Statistics Information DBA_HIST_TEMPFILE Names of Temporary Datafiles DBA_HIST_TEMPSTATXS Temporary Datafile Historical Statistics Information DBA_HIST_COMP_IOSTAT I/O stats aggregated on component level DBA_HIST_SQLSTAT SQL Historical Statistics Information DBA_HIST_SQLTEXT SQL Text ...................... ........................ORACLE 數(shù)據(jù)庫(kù)中以DBA_HIST命名的視圖非常多,下面簡(jiǎn)單介紹幾個(gè),比如說(shuō):
該視圖由ASH自動(dòng)維護(hù),以每秒一次的頻率收集當(dāng)前系統(tǒng)中活動(dòng)session的信息。雖然說(shuō)是記錄SESSION的歷史記錄,不過(guò)該視圖與V$SESSION還是有差異的。 SQL> desc v$active_session_history; Name Type Nullable Default Comments ------------------------- ------------ -------- ------- -------- SAMPLE_ID NUMBER Y SAMPLE_TIME TIMESTAMP(3) Y SESSION_ID NUMBER Y SESSION_SERIAL# NUMBER Y USER_ID NUMBER Y SQL_ID VARCHAR2(13) Y SQL_CHILD_NUMBER NUMBER Y SQL_PLAN_HASH_VALUE NUMBER Y FORCE_MATCHING_SIGNATURE NUMBER Y SQL_OPCODE NUMBER Y PLSQL_ENTRY_OBJECT_ID NUMBER Y PLSQL_ENTRY_SUBPROGRAM_ID NUMBER Y PLSQL_OBJECT_ID NUMBER Y PLSQL_SUBPROGRAM_ID NUMBER Y SERVICE_HASH NUMBER Y SESSION_TYPE VARCHAR2(10) Y SESSION_STATE VARCHAR2(7) Y QC_SESSION_ID NUMBER Y QC_INSTANCE_ID NUMBER Y BLOCKING_SESSION NUMBER Y BLOCKING_SESSION_STATUS VARCHAR2(11) Y BLOCKING_SESSION_SERIAL# NUMBER Y EVENT VARCHAR2(64) Y EVENT_ID NUMBER Y EVENT# NUMBER Y SEQ# NUMBER Y P1TEXT VARCHAR2(64) Y P1 NUMBER Y P2TEXT VARCHAR2(64) Y P2 NUMBER Y P3TEXT VARCHAR2(64) Y P3 NUMBER Y WAIT_CLASS VARCHAR2(64) Y WAIT_CLASS_ID NUMBER Y WAIT_TIME NUMBER Y TIME_WAITED NUMBER Y XID RAW(8) Y CURRENT_OBJ# NUMBER Y CURRENT_FILE# NUMBER Y CURRENT_BLOCK# NUMBER Y PROGRAM VARCHAR2(48) Y MODULE VARCHAR2(48) Y ACTION VARCHAR2(32) Y CLIENT_ID VARCHAR2(64) Yv$session 中與操作相關(guān)的列均被收集,除此之外還冗余了部分列,這是為了方便DBA查詢V$ACTIVE_SESSION_HISTORY時(shí)能夠快速獲取到自己需要的數(shù)據(jù)。
該視圖與V$ACTIVE_SESSION_HISTORY的結(jié)構(gòu)灰常灰常灰常的想像,功能也灰常灰常灰常的類似,都是記錄活動(dòng)session的操作記錄,所不同點(diǎn)在于,V$ACTIVE_SESSION_HISTORY是ORACLE自動(dòng)在內(nèi)存中維護(hù)的,受制于其可用內(nèi)存區(qū)限制,并非所有記錄都能保存,而DBA_HIST_ACTIVE_SESS_HISTORY視圖則是維護(hù)到磁盤中的。簡(jiǎn)單理解的話,就是說(shuō)通常情況下,DBA_HIST_ACTIVE_SESS_HISTORY視圖的數(shù)據(jù)量要比V$ACTIVE_SESSION_HISTORY的多。
該視圖用來(lái)顯示數(shù)據(jù)庫(kù)和實(shí)例的信息,比如DBID,實(shí)例名,數(shù)據(jù)庫(kù)版本等等信息,生成報(bào)表中第一行表格,就是由該視圖生成的。如圖: 如果你去分析awrrpt.sql腳本的話,會(huì)發(fā)現(xiàn)其中有如下腳本,上述表格中顯示的內(nèi)容信息,正是來(lái)自于下列腳本: select distinct (case when cd.dbid = wr.dbid and cd.name = wr.db_name and ci.instance_number = wr.instance_number and ci.instance_name = wr.instance_name then ¨* ¨ else ¨ ¨ end) || wr.dbid dbbid , wr.instance_number instt_num , wr.db_name dbb_name , wr.instance_name instt_name , wr.host_name host from dba_hist_database_instance wr, v$database cd, v$instance ci;
該視圖用來(lái)記錄當(dāng)前數(shù)據(jù)庫(kù)收集到的快照信息。相信朋友應(yīng)該還記得之前使用腳本生成報(bào)表時(shí),輸入完快照區(qū)間后顯示的一堆列表,沒(méi)錯(cuò),那正是DBA_HIST_SNAPSHOT記錄的內(nèi)容,該段功能對(duì)應(yīng)的代碼如下: select to_char(s.startup_time,¨dd Mon "at" HH24:mi:ss¨) instart_fmt , di.instance_name inst_name , di.db_name db_name , s.snap_id snap_id , to_char(s.end_interval_time,¨dd Mon YYYY HH24:mi¨) snapdat , s.snap_level lvl from dba_hist_snapshot s , dba_hist_database_instance di where s.dbid = :dbid and di.dbid = :dbid and s.instance_number = :inst_num and di.instance_number = :inst_num and di.dbid = s.dbid and di.instance_number = s.instance_number and di.startup_time = s.startup_time and s.end_interval_time >= decode( &num_days , 0 , to_date(¨31-JAN-9999¨,¨DD-MON-YYYY¨) , 3.14, s.end_interval_time , to_date(:max_snap_time,¨dd/mm/yyyy¨) - (&num_days-1)) order by db_name, instance_name, snap_id; |