Monitoring System Performance(13- Data Dictionary den ASH bilgisini alma)

Data Dictionary den ASH bilgisini alma


-  ASH bilgilerini almak için kullanabileceğiniz birkaç data dictionary viewı vardır. İlki V$ACTIVE_SESSION_HISTORY,
   veritabanınızdaki current veya recent sessions hakkında bilgi almak için kullanılabilir. İkincisi, DBA_HIST_ACTIVE_SESS_HISTORY, eski ASH bilgilerini depolamak için kullanılır.
   Veritabanınızdaki son 15 dakika içinde tüm etkinlikleri ve toplam bekleme süresini(total wait time) görmek isterseniz aşağıdaki sorguyu verebilirsiniz:
  
    SELECT s.event, sum(s.wait_time + s.time_waited) total_wait
    FROM v$active_session_history s
    WHERE s.sample_time between sysdate-1/24/4 AND sysdate
    GROUP BY s.event
    ORDER BY 2 desc;
    EVENT            TOTAL_WAIT
    ------------------------------------------  -------------
                20002600
    db file scattered read        15649078
    read by other session         9859503
    db file sequential read        443298
    direct path read temp          156463
    direct path write temp           139984
    log file parallel write        49469
    db file parallel write          21207
    log file sync            11793
    SGA: allocation forcing component growth   11711
    control file parallel write      4421
    control file sequential read      2122
    SQL*Net more data from client      395
    SQL*Net more data to client      66
  
   - Oturuma özgü daha fazla bilgi edinmek isterseniz ve en çok CPU kaynağını son 15 dakika içinde kullanan top 5 oturumu görmek istiyorsanız, aşağıdaki sorguyu verebilirsiniz:
  
    column username format a12
    column module format a30
    SELECT * FROM
    (
    SELECT s.username, s.module, s.sid, s.serial#, count(*)
    FROM v$active_session_history h, v$session s
    WHERE h.session_id = s.sid
    AND h.session_serial# = s.serial#
    AND session_state= 'ON CPU' AND
     sample_time > sysdate - interval '15' minute
    GROUP BY s.username, s.module, s.sid, s.serial#
    ORDER BY count(*) desc
    )
    where rownum <= 5;
    USERNAME   MODULE      SID  SERIAL#  COUNT(*)
    ---------- ---------------------------- ---------- ---------- ----------
    SYS    DBMS_SCHEDULER    536   9    43
    APPLOAD   etl1@app1 (TNS V1-V3)  1074   3588   16
    APPLOAD   etl1@app1 (TNS V1-V3)  1001  4004   12
    APPLOAD   etl1@app1 (TNS V1-V3)  968   108   5
    DBSNMP    emagent@ora1 (TNS V1-V3) 524   3    2
   - SESSION_STATE sütununda bir oturumun etkin olup olmadığını veya kaynaklar için bekleyip beklemediğini belirten iki geçerli ON CPU ve WAITING değeri bulunur.
   Kaynakları bekleyen oturumları görmek isterseniz, aynı sorguda SESSION_STATE  ile sorgulayabiliriz.
  
   Verilen bir örnek dönem için en çok kullanılan veritabanı nesnelerini görmek isterseniz, bu bilgiyi elde etmek için V$ACTIVE_SESSION_HISTORY i DBA_OBJECTS viewına joinleyebiliriz.
   Aşağıdaki örnekte, son 15 dakika içinde, en çok kullanımda olana 5 database objesini ve bunlarla ilişkili nesnelerin listisini getirmek için:
    SELECT * FROM
    (
    SELECT o.object_name, o.object_type, s.event,
     SUM(s.wait_time + s.time_waited) total_waited
    FROM v$active_session_history s, dba_objects o
    WHERE s.sample_time between sysdate - 1/24/4 and sysdate
    AND s.current_obj# = o.object_id
    GROUP BY o.object_name, o.object_type, s.event
    ORDER BY 4 desc
    ) WHERE rownum <= 5;
   
    OBJECT_NAME     OBJECT_TYPE   EVENT             TOTAL_WAITED
    -----------------------  ---------------  ------------------------------       ------------
    WRI$_ALERT_OUTSTANDING  TABLE     Streams AQ: enqueue block ed on low memory   110070196
    APP_ETL_IDX1    INDEX    read by other session         65248777
    APP_SOURCE_INFO    TABLE PARTITION  db file scattered read         33801035
    EMPPART_PK_I    INDEX PARTITION  read by other session         28077262
    APP_ORDSTAT     TABLE PARTITION  db file scattered read         15569867
  
   Nasıl Çalışır:
   - DBA_HIST_ACTIVE_SESS_HISTORY viewı, V$ACTIVE_SESSION_HISTORY viewından çıkmış oturumlarla ilgili geçmiş bilgileri verir.
   Diyelim ki, performans konusunda veritabanınızda kötü bir gün geçirdiniz. Örneğin, performans zayıf olduğunda belirli bir günde en fazla kaynağı
   tüketen kullanıcıları elde etmek isterseniz aşağıdaki sorguyu yayınlayabilirsiniz:
  
  
    SELECT * FROM
    (
    SELECT u.username, h.module, h.session_id sid,
     h.session_serial# serial#, count(*)
    FROM dba_hist_active_sess_history h, dba_users u
    WHERE h.user_id = u.user_id
    AND session_state= 'ON CPU'
    AND (sample_time between to_date('2011-05-15:00:00:00','yyyy-mm-dd:hh24:mi:ss')
    AND to_date('2011-05-15:23:59:59','yyyy-mm-dd:hh24:mi:ss'))
    AND u.username != 'SYS'
    GROUP BY u.username, h.module, h.session_id, h.session_serial#
    ORDER BY count(*) desc
    )
    where rownum <= 5;
   
    USERNAME MODULE SID SERIAL# COUNT(*)
    ------------ ------------------------------ ---------- ---------- ----------
    APPLOAD1 etl1@app1 (TNS V1-V3) 1047 317 1105
    APPLOAD1 etl1@app1 (TNS V1-V3) 1054 468 659
    APPLOAD1 etl1@app1 (TNS V1-V3) 1000 909 387
    STG oracle@ora1 (TNS V1-V3) 962 1707 353
    APPLOAD1 etl1@app1 (TNS V1-V3) 837 64412 328
   
   - Veritabanı nesnelerini sıfırlamak için, aynı zaman çerçevesi için aşağıdaki sorguyu verebilirsiniz:
    SELECT * FROM
    (
    SELECT o.object_name, o.object_type, s.event,
     SUM(s.wait_time + s.time_waited) total_waited
    FROM dba_hist_active_sess_history s, dba_objects o
    WHERE s.sample_time
    between to_date('2011-05-15:00:00:00','yyyy-mm-dd:hh24:mi:ss')
    AND to_date('2011-05-15:23:59:59','yyyy-mm-dd:hh24:mi:ss')
    AND s.current_obj# = o.object_id
    GROUP BY o.object_name, o.object_type, s.event
    ORDER BY 4 desc
    )
    WHERE rownum <= 5;
   
    OBJECT_NAME OBJECT_TYPE EVENT TOTAL_WAITED
    ---------------------------- --------------- ------------------------- ------------
    EMPPART TABLE PARTITION PX Deq Credit: send blkd 8196703427
    APPLOAD_PROCESS_STATUS TABLE db file scattered read 628675085
    APPLOAD_PROCESS_STATUS TABLE read by other session 408577335
    APP_SOURCE_INFO TABLE PARTITION db file scattered read 288479849
    APP_QUALITY_INFO TABLE PARTITION Datapump dump file I/O 192290534   

Constraint Disable-Enable

Disable Constraint BEGIN   FOR c IN   (SELECT c.owner, c.table_name, c.constraint_name    FROM user_constraints c, user_tables t    WHERE...