(6)查看AWR視圖 |
[君三思] 2009-11-5 |
三、查看AWR視圖不管是EM也好,或是前面演示中使用的awr*.sql腳本也好,實質都是訪問ORACLE中的部分相關視圖來生成統計數據,因此如果DBA對自己的理解能力有足夠的自信,也可以直接查詢動態性能視圖(或相關數據字典)的方式來獲取自己想要的那部分性能數據。ORACLE將這部分性能統計數據保存在DBA_HIST開頭的數據字典中,要查詢當前實例所有能夠訪問的DBA_HIST字典,可以通過下列語句: 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 數據庫中以DBA_HIST命名的視圖非常多,下面簡單介紹幾個,比如說:
該視圖由ASH自動維護,以每秒一次的頻率收集當前系統中活動session的信息。雖然說是記錄SESSION的歷史記錄,不過該視圖與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 中與操作相關的列均被收集,除此之外還冗余了部分列,這是為了方便DBA查詢V$ACTIVE_SESSION_HISTORY時能夠快速獲取到自己需要的數據。
該視圖與V$ACTIVE_SESSION_HISTORY的結構灰常灰常灰常的想像,功能也灰常灰常灰常的類似,都是記錄活動session的操作記錄,所不同點在于,V$ACTIVE_SESSION_HISTORY是ORACLE自動在內存中維護的,受制于其可用內存區限制,并非所有記錄都能保存,而DBA_HIST_ACTIVE_SESS_HISTORY視圖則是維護到磁盤中的。簡單理解的話,就是說通常情況下,DBA_HIST_ACTIVE_SESS_HISTORY視圖的數據量要比V$ACTIVE_SESSION_HISTORY的多。
該視圖用來顯示數據庫和實例的信息,比如DBID,實例名,數據庫版本等等信息,生成報表中第一行表格,就是由該視圖生成的。如圖: 如果你去分析awrrpt.sql腳本的話,會發現其中有如下腳本,上述表格中顯示的內容信息,正是來自于下列腳本: 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;
該視圖用來記錄當前數據庫收集到的快照信息。相信朋友應該還記得之前使用腳本生成報表時,輸入完快照區間后顯示的一堆列表,沒錯,那正是DBA_HIST_SNAPSHOT記錄的內容,該段功能對應的代碼如下: 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; |