111

来源:这里教程网 时间:2026-03-03 14:13:52 作者:

--查看cpu select * from dba_hist_snapshot t  order by t.end_interval_time desc ; select * from (select round(nvl((sqt.cput / 1000000), to_number(null)),2) "Cpu Time (s)",                 round( nvl((sqt.elap / 1000000), to_number(null)),2) "Elap Time (s)",                  sqt.exec,                  round(decode(sqt.exec,0,to_number(null),(sqt.cput / sqt.exec / 1000000)),2) "Cpu per Exec (s)",                  round((100 * (sqt.elap / (select sum(e.value) - sum(b.value)                                  from dba_hist_sys_time_model b,                                       dba_hist_sys_time_model e                                 where b.snap_id = &beg_snap and                                       e.snap_id = &end_snap and                                       e.stat_name = 'DB time' and                                       b.stat_name = 'DB time'))) ,2)norm_val,                  sqt.sql_id,                   sqt.plan_hash_value,                decode(sqt.module, null, null, 'Module: ' || sqt.module) SqlModule,                  nvl(to_nchar(SUBSTR(st.sql_text,1,2000)) , (' ** SQL Text Not Available ** ')) SqlText             from (select sql_id,                               plan_hash_value,                        max(module) module,                          sum(cpu_time_delta) cput,                        sum(elapsed_time_delta) elap,                          sum(executions_delta) exec                     from dba_hist_sqlstat                    where &beg_snap < snap_id and                          snap_id <= &end_snap                    group by sql_id,plan_hash_value) sqt,                  dba_hist_sqltext st            where st.sql_id(+) = sqt.sql_id           order by nvl(sqt.cput, -1) desc,                     sqt.sql_id)    where rownum < 65 and          (rownum <= 10 or norm_val > 1);

SELECT  *
   FROM  ( SELECT  X.*, Y.SQL_TEXT
           FROM  ( SELECT  A.SQL_ID,
                        A.SQL_PLAN_HASH_VALUE,
                        SUM (A.TM_DELTA_CPU_TIME / 1000) CPU_TIMES,
                        SUM (A.TM_DELTA_DB_TIME) / 1000 DB_TIMES,
                        SUM (A.DELTA_READ_IO_REQUESTS) IOPS,
                        SUM (A.DELTA_READ_IO_BYTES) / 1024 / 1024 / 1024 DISK_READS
                   FROM  V$ACTIVE_SESSION_HISTORY A
                  WHERE  A.SAMPLE_TIME > =TO_DATE( '2017-07-22 10:00:00' 'YYYY-MM-DD HH24:MI:SS' )
                    AND  A.SAMPLE_TIME < =TO_DATE( '2017-07-22 11:00:00' 'YYYY-MM-DD HH24:MI:SS' )
                  GROUP  BY  A.SQL_ID, A.SQL_PLAN_HASH_VALUE) X,
                ( SELECT  DISTINCT  B.SQL_ID, B.PLAN_HASH_VALUE, B.SQL_TEXT
                   FROM  V$SQL B) Y
          WHERE  X.SQL_ID = Y.SQL_ID
            AND  X.SQL_PLAN_HASH_VALUE = Y.PLAN_HASH_VALUE)
  WHERE  DISK_READS > 1
  ORDER  BY  DISK_READS  DESC ;

--发现那些SQL运行了大量的PARSE select sql_text, parse_calls, executions   from v$sqlarea  order by parse_calls desc;   --SYS的总的PARSE情况 select name, value from v$sysstat where name like 'parse count%';   --CPU空间及繁忙情况 select * from v$osstat;   --查看每个Session的CPU利用情况: select ss.sid, se.command, ss.value CPU, se.username, se.program   from v$sesstat ss, v$session se  where ss.statistic# in        (select statistic#           from v$statname          where name = 'CPU used by this session')    and se.sid = ss.sid    and ss.sid > 6  order by CPU desc;   --比较一下哪个session的CPU使用时间最多,然后查看该Session的具体情况: select s.sid, s.event, s.MACHINE, s.OSUSER, s.wait_time, w.seq#, q.sql_text   from v$session_wait w, v$session s, v$process p, v$sqlarea q  where s.paddr = p.addr    and s.sid = &p    and s.sql_address = q.address;   --占用CPU最高的10个Session及其SQL语句 select s.sid,        w.wait_time,        w.seconds_in_wait,        w.state,        w.wait_time_micro,        w.time_remaining_micro,        w.time_since_last_wait_micro,        p.USERNAME,        status,        server,        schemaname,        osuser,        machine,        p.terminal,        p.program,        logon_time,        w.event,        w.wait_class,        tracefile,        sql_text,        last_active_time   from v$session_wait w, v$session s, v$process p, v$sqlarea q  where s.paddr = p.addr    and s.sid in (select sid                    from (select ss.sid                            from v$sesstat ss, v$session se                           where ss.statistic# in                                 (select statistic#                                    from v$statname                                   where name = 'CPU used by this session')                             and se.sid = ss.sid                             and ss.sid > 6                           order by ss.value desc)                   where rownum < 11)    and s.sql_address = q.address;     SELECT executions,        end_of_fetch_count,        elapsed_time / px_servers elapsed_time,        cpu_time / px_servers cpu_time,        buffer_gets / executions buffer_gets   FROM (SELECT sum(executions_delta) as EXECUTIONS,                sum(case                      when px_servers_execs_delta > 0 then                       px_servers_execs_delta                      else                       executions_delta                    end) as px_servers,                sum(end_of_fetch_count_delta) as end_of_fetch_count,                sum(elapsed_time_delta) as ELAPSED_TIME,                sum(cpu_time_delta) as CPU_TIME,                sum(buffer_gets_delta) as BUFFER_GETS           FROM DBA_HIST_SQLSTAT s, V$DATABASE d, DBA_HIST_SNAPSHOT sn          WHERE s.dbid = d.dbid            AND bitand(nvl(s.flag, 0), 1) = 0            AND sn.end_interval_time >                (select systimestamp at TIME ZONE dbtimezone from dual) - 7            AND s.sql_id = :1            AND s.snap_id = sn.snap_id            AND s.instance_number = sn.instance_number            AND s.dbid = sn.dbid            AND parsing_schema_name = :2)          select stime,        sum(nvl(case                  when event = 'db file sequential read' then                   round(times, 2)                end,                0)) as "db file sequential rea",        sum(nvl(case                  when event = 'log file sync' then                   round(times, 2)                end,                0)) as "log file sync",        sum(nvl(case                  when event = 'log file parallel write' then                   round(times, 2)                end,                0)) as "log file parallel write",        sum(nvl(case                  when event = 'db file scattered read' then                   round(times, 2)               end,                0)) as "db file scattered read"   from (select t.snap_id,                to_char(b.begin_interval_time, 'yyyy-mm-dd hh24:mi:ss') stime,                event_name event,               decode(sign(total_waits - lag(total_waits, 1)                            over(partition by event_name order by t.snap_id)),                       -1,                       (lag(time_waited_micro, 1)                        over(partition by event_name order by t.snap_id)) /                       (lag(total_waits, 1)                        over(partition by t.instance_number,                             event_name order by t.snap_id)),                       0,                       0,                       (time_waited_micro - lag(time_waited_micro, 1)                        over(partition by event_name order by t.snap_id)) /                       (total_waits - lag(total_waits, 1)                        over(partition by event_name order by t.snap_id))) / 1000 as times           from dba_hist_system_event t, dba_hist_snapshot b          where t.snap_id = b.snap_id            and b.begin_interval_time > trunc(sysdate-10)            and b.instance_number = t.instance_number            and event_name in                ('db file sequential read', 'log file sync',                 'db file scattered read', 'log file parallel write')            and t.instance_number = 1) where times > 0   group by snap_id, stime order by snap_id desc; select b.event EVENT,        a.username 用户,        a.sid SID,        c.address ADDRESS,        substr(c.sql_text, 1, 100) SQL   from gv$session a,        gv$session_wait b,        gv$sql c,        (select event, count(1) num           from gv$session_wait          where event not in                ('SQL*Net message from client',                 'SQL*Net message to client',                 'rdbms ipc message',                 'queue messages',                 'Streams AQ: waiting for messages in the queue')          group by event         having(event = 'latch free' and count(1) > 20) or (event = 'db file sequential read' and count(1) > 100) or (event = 'buffer busy waits' and count(1) > 100) or (event = 'db file scattered read' and count(1) > 20) or (event not in('latch free',                                                                                                                                                                                                                                              'db file sequential read',                                                                                                                                                                                                                                              'buffer busy waits',                                                                                                                                                                                                                                              'db file scattered read') and count(1) > 20)) d where a.sid = b.sid    and a.sql_address = c.address    and b.event = d.event order by 2  find ./ -mtime +10  -exec rm -rf {} \; SELECT   s.username,          decode(l.type, 'TM', 'TABLE LOCK', 'TX', 'ROW LOCK', NULL) LOCK_LEVEL,          o.owner,          o.object_name,          o.object_type,          s.sid,          s.serial#     FROM gv$session s, gv$lock l, dba_objects o    WHERE l.sid = s.sid      AND l.id1 = o.object_id(+)      AND s.username is NOT NULL      AND O.object_name=upper('');       SELECT   A.OWNER,                        --OBJECT所属用户   A.OBJECT_NAME,                  --OBJECT名称(表名)   B.XIDUSN,   B.XIDSLOT,   B.XIDSQN,   B.SESSION_ID,                   --锁表用户的session   B.ORACLE_USERNAME,              --锁表用户的Oracle用户名   B.OS_USER_NAME,                 --锁表用户的操作系统登陆用户名   B.PROCESS,   B.LOCKED_MODE,    C.MACHINE,                      --锁表用户的计算机名称(例如:WORKGROUP\UserName)   C.STATUS,                       --锁表状态   C.SERVER,   C.SID,   C.SERIAL#,   C.PROGRAM                       --锁表用户所用的数据库管理工具(例如:ob9.exe) FROM   ALL_OBJECTS A,   V$LOCKED_OBJECT B,   SYS.GV_$SESSION C  WHERE   A.OBJECT_ID = B.OBJECT_ID   AND B.PROCESS = C.PROCESS; set linesize 300 set pagesize 300 select * from table(dbms_xplan.display_cursor(null, null, 'ADVANCED')); select * from table(dbms_xplan.display_cursor('', 0, 'allstats last')); select output from table(dbms_workload_repository.ash_report_html( dbid , inst_num , l_btime , l_etime); select * from table(dbms_xplan.display_awr('',,null,'ADVANCED')); EXPLAIN PLAN FOR ; select * from table(dbms_xplan.display_cursor('', 0, 'iostats last -predicate -note'));  /*+gather_plan_statistics ab*/ ===================DB wait event监控======================== select /*+ordered*/  sw.seq#,  sw.event,  s.username,  s.OSUSER,  s.TERMINAL,  d.event_count,  'SID' || s.sid,   s.serial#,  s.BLOCKING_SESSION,  s.blocking_instance,  s.machine,  sw.p2,  sw.P1RAW,  sw.wait_time || 'csec',  sw.seconds_in_wait || 'sec',  sw.state,  (select st.sql_id     from v$sql st    where s.sql_hash_value = st.hash_value      and rownum = 1 ) sql_id,  (select st.sql_text     from v$sql st    where s.sql_hash_value = st.hash_value      and rownum = 1 ) sql_text   from (select event, count(1) event_count           from v$session_wait          where state <> 'WAITED SHORT TIME'            and event not like '%SQL*Net%'            and event not like 'PXDeq%'            and event not like 'rdbms ipc message'            and event not like 'queue messages'            and event not like                'Streams AQ: waiting for messages in the queue'            and event not like 'jobq slave wait'            and event not like 'class slave wait'            and event not like 'db file parallel write'          group by event         having((event = 'latch free' and count(1) > 10) or (event = 'ARCH wait on SENDREQ' and count(1) > 40) or (event = 'latch: cache buffers chains' and count(1) > 10) or (event = 'enqueue' and count(1) > 10) or (event = 'read by other session' and count(1) > 20) or (event = 'db file scattered read' and count(1) > 15) or (event = 'db file sequential read' and count(1) > 60) or (event = 'buffer busy waits' and count(1) > 10) or (event not in ('db file sequential read', 'buffer busy waits', 'db file scattered read', 'latch free', 'enqueue', 'read by other session', 'TCP Socket (KGAS)', 'ARCH wait on SENDREQ') and count(1) > 10))) d,        v$session_wait sw,        v$session s  where d.event = sw.event    and sw.sid = s.sid  order by sw.event, s.username  ---查询热块对象sql语句:   SELECT *     FROM (SELECT O.OWNER, O.OBJECT_NAME, O.OBJECT_TYPE, SUM(TCH) TOUCHTIME,             FROM X$BH B, DBA_OBJECTS O            WHERE B.OBJ = O.DATA_OBJECT_ID              AND B.TS# > 0            GROUP BY O.OWNER, O.OBJECT_NAME, O.OBJECT_TYPE            ORDER BY SUM(TCH) DESC)    WHERE ROWNUM <= 10   ;         --查找热点块操作语句    SELECT /*+rule*/    HASH_VALUE, SQL_TEXT     FROM V$SQLTEXT    WHERE (HASH_VALUE, ADDRESS) IN          (SELECT A.HASH_VALUE, A.ADDRESS             FROM V$SQLTEXT A,                  (SELECT DISTINCT A.OWNER, A.SEGMENT_NAME, A.SEGMENT_TYPE                     FROM DBA_EXTENTS A,                          (SELECT DBARFIL, DBABLK                             FROM (SELECT DBARFIL, DBABLK                                     FROM X$BH                                    ORDER BY TCH DESC)                            WHERE ROWNUM < 11) B                    WHERE A.RELATIVE_FNO = B.DBARFIL                      AND A.BLOCK_ID <= B.DBABLK                      AND A.BLOCK_ID + A.BLOCKS > B.DBABLK) B            WHERE A.SQL_TEXT LIKE '%' || B.SEGMENT_NAME || '%'              AND B.SEGMENT_TYPE = 'TABLE')    ORDER BY HASH_VALUE, ADDRESS, PIECE;    col name for a40   col PARAMETER1 for a15    col PARAMETER2 for a15    col PARAMETER3 for a15   col WAIT_CLASS for a30 select name,PARAMETER1,PARAMETER2,PARAMETER3,WAIT_CLASS from v$event_name where name like '%db file s%';   --查看row cache objects 的具体信息:   SELECTaddr,         latch#,         child#,         level#,          name,          gets,         misses,         sleeps     FROMv$latch_children    WHEREname='rowcache objects' AND gets <>0 ORDER BYgets;    SELECT "WHERE",sleep_count, location   FROMv$latch_misses  WHEREparent_name = 'row cacheobjects' ANDsleep_count > 0;   SELECT DISTINCTr.cache#,                  r.parameter name,                  r.TYPE,                  r.subordinate#,                  r.gets     FROMv$rowcache r ORDER BY1, 4,5;   我们可以使用如下SQL检查row cache 是否高效。 pct_succ_gets 接近与100最好,如果接近于0,就说明需要优化。   SELECT parameter,        SUM(gets),        SUM(getmisses),        100 * SUM (gets-getmisses)/sum(gets)pct_succ_gets, sum(modifications)updates FROM V$ROWCACHE WHERE gets >0 GROUP BYparameter; SELECT  sum(VALUE) / 1024 / 1024   FROM v$session s, v$sesstat st, v$statname sn, v$process p   WHERE st.SID = s.SID   AND st.statistic# = sn.statistic#   AND sn.NAME LIKE 'session pga memory'   AND p.addr = s.paddr  AND VALUE > 10 * 1024 * 1024;   Oracle latch: row cache objects系统整体慢:可以看到到底是哪个数据字典争用严重。 col cache# head "Cache|no" form 999 col parameter head "Parameter" form a25 col type head "Type" form a12 col subordinate# head "Sub|ordi|nate" form 9999 col rcgets head "Cache|Gets" form 999999999999 col rcmisses head "Cache|Misses" form 999999999999 col rcmodifications head "Cache|Modifica|tions" form 999999999999 col rcflushes head "Cache|Flushes" form 999999999999 col kqrstcln head "Child#" form 999 col lagets head "Latch|Gets" form 999999999999 col lamisses head "Latch|Misses" form 999999999999 col laimge head "Latch|Immediate|gets" form 999999999999 select dc.kqrstcid CACHE#, dc.kqrsttxt PARAMETER, decode(dc.kqrsttyp, 1,'PARENT','SUBORDINATE') type, decode(dc.kqrsttyp, 2, kqrstsno, null) subordinate#,  dc.kqrstgrq rcgets, dc.kqrstgmi rcmisses, dc.kqrstmrq rcmodifications, dc.kqrstmfl rcflushes, dc.kqrstcln,  la.gets lagets, la.misses lamisses, la.immediate_gets laimge from x$kqrst dc, v$latch_children la where dc.inst_id = userenv('instance') and la.child# = dc.kqrstcln and la.name = 'row cache objects' order by rcgets desc /        疑问:sql增加字段怎么处理 http://blog.csdn.net/tianlesoftware/article/details/6919280  x$kcvfh 高水位线 http://blog.csdn.net/qq578473688/article/details/54561458 ORA-04030: (kxs-heap-w,kcbpioqInitClientBuffer  依赖关系  crsctl status res para .db   -p  crsctl status res  serverpool.pl  SQL> select ksppinm as "hidden parameter", ksppstvl as "value" from x$ksppi join x$ksppcv  using (indx) where ksppinm like '%_pga_max_size%' order by ksppinm;  -------------------- http://www.cnblogs.com/xudong-bupt/p/3721210.html http://blog.csdn.net/msdnchina/article/details/46278299 http://www.itpub.net/thread-1310824-2-1.html http://blog.tanelpoder.com/2012/09/03/optimizer-statistics-driven-direct-path-read-decision-for-full-table-scans-_direct_read_decision_statistics_driven/ enq: KO - fast object checkpoint ----------------------------------- select FILE# ,to_char(CHECKPOINT_CHANGE#) , LAST_CHANGE#  from  v$datafile;  select FILE# ,to_char(CHECKPOINT_CHANGE#)  from  v$datafile_header;  SQL> select sequence#,checkpoint_change#,last_redo_change# from v$thread; ALTER SYSTEM SET "_system_trig_enabled"=false; SQL> select event, wait_time_milli,wait_count 2 from v$event_histogram 3 where event = 'log file parallel write'; SELECT SQL_TEXT, EXECUTIONS   FROM (SELECT SQL_TEXT,                EXECUTIONS,                RANK() OVER(ORDER BY EXECUTIONS DESC) EXEC_RANK           FROM V$SQLAREA)  WHERE EXEC_RANK <= 15;    SELECT TO_CHAR(N.BEGIN_INTERVAL_TIME, 'YYYY-MM-DD') "DATETIME",        m.snap_id,        M.SQL_ID,        m.plan_hash_value,        M.EXECUTIONS_DELTA,        round(m.buffer_gets_delta /m.executions_delta,3) as buffer_gets_delta ,        round(m.elapsed_time_delta /m.executions_delta,3) as elapsed_time_delta ,          round(m.disk_reads_delta /m.executions_delta,3) as disk_reads_delta ,             FROM DBA_HIST_SQLSTAT M, DBA_HIST_SNAPSHOT N  WHERE M.SNAP_ID = N.SNAP_ID    AND M.DBID = N.DBID    AND M.INSTANCE_NUMBER = N.INSTANCE_NUMBER    AND M.INSTANCE_NUMBER = 1    AND TO_CHAR(N.BEGIN_INTERVAL_TIME, 'YYYY-MM-DD') = '2014-11-20'    AND M.SQL_ID = &SQL_ID  ORDER BY M.snap_id desc;   SELECT M.SQL_ID ,        TO_CHAR(N.BEGIN_INTERVAL_TIME, 'YYYY-MM-DD')   "DATETIME",        SUM(M.EXECUTIONS_DELTA)  EXECUTIONS FROM DBA_HIST_SQLSTAT M, DBA_HIST_SNAPSHOT N WHERE M.SNAP_ID  = N.SNAP_ID   AND M.DBID = N.DBID   AND M.INSTANCE_NUMBER = N.INSTANCE_NUMBER   AND M.INSTANCE_NUMBER=1   AND TO_CHAR(N.BEGIN_INTERVAL_TIME, 'YYYY-MM-DD') ='2014-11-20'   AND M.SQL_ID=&SQL_ID GROUP BY M.SQL_ID , TO_CHAR(N.BEGIN_INTERVAL_TIME, 'YYYY-MM-DD') ORDER BY M.SQL_ID     col USERNAME for a10  col SPID for a8  col PROGRAM for a20  select p.username,p.spid,p.program,pm.category,pm.used,pm.allocated,pm.max_allocated    from v$process p ,v$process_memory pm    where p.pid=pm.pid    and p.pid in    (select addr,pid,spid,username from v$process    where addr in (select distinct paddr from v$session where username is not null));   --sql stat in snapshot select t.snap_id,        to_char(t.begin_interval_time, 'yyyy-mm-dd hh24:mi:ss') begin_interval_time,        s.sql_id,        cpu_time_delta cpu_time,        round(cpu_time_delta/decode(executions_delta,0,1,executions_delta)) avg_cpu_time,        executions_delta executions,        elapsed_time_delta elapsed_time,        round(elapsed_time_delta/decode(executions_delta,0,1,executions_delta)) avg_elapsed_time,        buffer_gets_delta buffer_gets,        round(buffer_gets_delta/decode(executions_delta,0,1,executions_delta)) avg_buffer_gets,        s.rows_processed_delta,        disk_reads_delta disk_reads,        fetches_delta fetches,        sorts_delta sorts,        s.plan_hash_value   from dba_hist_sqlstat s, dba_hist_snapshot t where s.snap_id = t.snap_id    and t.begin_interval_time     between to_date('', 'yyyy-mm-dd hh24:mi:ss')       and to_date('', 'yyyy-mm-dd hh24:mi:ss')     and sql_id = '' --   and plan_hash_value in (1101836845, 2899593734)    order by s.snap_id desc select end_time, process from (select to_char(trunc(end_time,'mi'), 'YYYY-MM-DD HH24:MI:SS') end_time, round(value*limit_value/100) process from v$sysmetric_history,(select limit_value from v$resource_limit where resource_name = 'processes') where metric_name = 'Process Limit %'); select end_time, current_process, process_value, used_pct   from (select to_char(trunc(end_time, 'mi'), 'YYYY-MM-DD HH24:MI:SS') end_time,                round(value * limit_value / 100) current_process,                limit_value process_value,                round(value, 2) || '%' used_pct           from v$sysmetric_history,                (select limit_value                   from v$resource_limit                  where resource_name = 'processes')          where metric_name = 'Process Limit %')  order by end_time desc -- unlock user's statistic SPOOL ./script/unlock_user_statistic.sql   SELECT 'spool ./log/unlock_user_statistic.log' FROM dual;   SELECT distinct 'exec dbms_stats.unlock_schema_stats (ownname => '''||owner||''');'     FROM dba_tab_statistics    WHERE owner in (select owner from t_user_cfg);   SELECT 'spool off' FROM dual; SPOOL OFF   SELECT distinct 'exec dbms_stats.lock_table_stats (ownname => '''||owner||''', tabname => '''||table_name||''');' SELECT   /*+ rule */          s.username        , s.logon_time        , s.sid        , s.serial#        , s.status        , s.username        , s.osuser        , s.machine        , DECODE (l.lmode, 0, 'lock waiter', 'lock holder') resp        , s.program        , s.module        , s.sql_address     FROM v$session s        , v$lock l    WHERE l.id1 IN (SELECT c.id1                      FROM v$lock c                     WHERE c.lmode = 0)      AND l.sid = s.sid ORDER BY l.id1        , l.BLOCK DESC;  select l.inst_id,decode(request, 0, 'holder:', 'waiter:') || l.sid holder_msg,            s.username,            s.osuser,            s.machine,            s.status,            s.sql_id,            s.prev_sql_id,            q.sql_text,            q2.sql_text pre_sql_text,            id1,            id2,            lmode,            request,            l.type,            ctime       from gv$lock l left outer join gv$session s on (l.inst_id=s.inst_id and l.sid = s.sid)            left outer join gv$sql q on (s.inst_id=q.inst_id and s.sql_id=q.sql_id)            left outer join gv$sql q2 on (s.inst_id=q2.inst_id and s.prev_sql_id=q2.sql_id)          where l.type in ('TX','TM')        and (request <> 0 or block <> 0 )        and ctime > 600      order by inst_id,id1, request; SELECT s.username,        s.logon_time,        s.sid,        s.serial#,            s.status,        s.username,        s.osuser,        s.machine,        DECODE (l.lmode, 0, 'lock waiter', 'lock holder') resp,        s.program,            s.module,        a.sql_text   FROM v$session s, v$sqlarea a, v$lock l WHERE l.id1 IN (SELECT id1                    FROM v$lock                   WHERE lmode = 0)    AND l.sid = s.sid    AND s.sql_address = a.address    ORDER BY l.id1,BLOCK DESC undo表空间中常用的操作: (1)查看undo表空间undotbs1的属性: SQL> select b.tablespace_name,AUTOEXTENSIBLE,RETENTION  from dba_tablespaces a,dba_data_files b           where a.TABLESPACE_NAME=b.TABLESPACE_NAME and b.TABLESPACE_NAME='UNDOTBS1'; TABLESPACE_NAME  AUT  RETENTION ----------------------     ---   ---------------- UNDOTBS1               NO  NOGUARANTEE (2)查看各个回退段的使用信息: select a.name,b.extents,b.rssize,b.writes,b.xacts,b.wraps from v$rollname a,v$rollstat b where a.usn=b.usn; (3)确定哪些用户正在使用undo段: SQL> select a.username,b.name,c.used_ublk from v$session a,v$rollname b,v$transaction c          where a.saddr=c.ses_addr and b.usn=c.xidusn;  USERNAME  NAME                USED_UBLK ----------      -----------------------          ---------- NDMC       _SYSSMU1_1255220753$       1 NDMC       _SYSSMU5_1255220754$       1 (4)每秒生成的UNDO量,可以通过如下SQL得出: SQL> SELECT (SUM(undoblks))/ SUM((end_time - begin_time) * 86400) FROM v$undostat; (SUM(UNDOBLKS))/SUM((END_TIME-BEGIN_TIME)*86400) --------------------------------------------------------------           7.97590055 或者可以看下AWR报告中的Undo Statistics部分。 (5)当前undo表空间使用状态: SQL> SELECT DISTINCT STATUS,SUM(BYTES),COUNT(*) FROM DBA_UNDO_EXTENTS GROUP BY STATUS; STATUS  SUM(BYTES)   COUNT(*) ---------             ----------------   ---------- UNEXPIRED        3225157632   5667 EXPIRED            1063518208   1588 ACTIVE             1048576        1 (6)查看活动事务v$transaction SQL> SELECT A.SID, A.USERNAME, B.XIDUSN, B.USED_UREC, B.USED_UBLK            FROM V$SESSION A, V$TRANSACTION B WHERE A.SADDR=B.SES_ADDR;        SID  USERNAME   XIDUSN    USED_UREC USED_UBLK ---------- ------------ ---------- ---------- ----------        407   NDMC       15         3        1 SQL> SELECT XID AS "txn_id", XIDUSN AS "undo_seg", USED_UBLK "used_undo_blocks",                      XIDSLOT AS "slot", XIDSQN AS "seq", STATUS AS "txn_status"           FROM V$TRANSACTION; txn_id         undo_seg   used_undo_blocks    slot      seq     txn_status ---------------- ---------- ---------------- ---------- --------- ------------- 14001600733A0C00    20           1             22      801395      ACTIVE   1)检查long operation SQL> select sid, target,opname, sofar,totalwork,time_remaining        from v$session_longops where time_remaining>0; 2)检查占用回滚段较多的事务: SQL> select xidusn,s.sid,s.last_call_et, s.username, used_ublk,USED_UREC,space,             RECURSIVE, NOUNDO, START_UBAFIL,start_ubablk, start_uext        from v$transaction t, v$session s       where t.ses_addr=s.saddr; sid and undo:  select xidusn,s.sid,s.last_call_et, s.username, used_ublk,USED_UREC,space,             RECURSIVE, NOUNDO, START_UBAFIL,start_ubablk, start_uext        from v$transaction t, v$session s       where t.ses_addr=s.saddr;        如果想查询某一个具体的隐含参数的值,只需要在上面原基础上加上 and x.ksppinm ='XXXXX'  过滤。  例如查询 _gc_undo_affinity 。 col name for a30; col value for a10; select x.ksppinm  name, y.ksppstvl  value, y.ksppstdf  isdefault, decode(bitand(y.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE')  ismod, decode(bitand(y.ksppstvf,2),2,'TRUE','FALSE')  isadj from sys.x$ksppi x, sys.x$ksppcv y where x.inst_id = userenv('Instance') and y.inst_id = userenv('Instance') and x.indx = y.indx and x.ksppinm like '%_undo_%' order by translate(x.ksppinm, ' _', ' ') / 这个语句可以查出来哪些SQL占了比较大的 shared pool , 并生成将该 SQL 移出 shared pool 的语句(需 sys 才能执行) Shared pool free size 很小时,不要清理 shared pool , 只可有选择性的将一些非绑定变量语句移出去。      select sql_id,sql_text,sql_fulltext,executions,round(sharable_mem/1024/1024,2) sharmemo_used_mb,            last_active_time,parsing_schema_name,s.service,            'exec  dbms_shared_pool.purge('''||address||','||hash_value||''',''c'');' remove_sql       from v$sql s       where s.sharable_mem > 1 * 1024 * 1024       order by s.sharable_mem desc;            select inst_id,pool,name,round(sum(bytes)/1024/1024,2) size_mb from gv$sgastat where pool='shared pool' and name='free memory' group by inst_id,pool,name; ----cpu_time select SUBSTR(TO_CHAR(begin_time, 'HH:MI' ),1,4) || '0' as BEGIN_TIME,        AVG(value) as avg_VALUE,        min(value) as min_VALUE,        max(value) as max_VALUE,        count(*)   from V$SYSMETRIC_HISTORY  where metric_name= 'Host CPU Utilization (%)'  group by SUBSTR(TO_CHAR(begin_time, 'HH:MI' ),1,4)  order by 1; 1、在source database 创建staging table BEGIN DBMS_SPM.CREATE_STGTAB_BASELINE(    table_name      =>'chad_spm_migrate',    table_owner     => 'DBMGR',    tablespace_name => 'USERS'); END; 2、将SQL Planbaselines 导入staging table  ----(根据sql_handle与PLAN_NAME进行导出) DECLARE l_plans_packed  PLS_INTEGER; BEGIN l_plans_packed := DBMS_SPM.pack_stgtab_baseline(    table_name      =>'chad_spm_migrate',    table_owner     => 'DBMGR',    sql_handle      => 'SQL_43aa553e72757e01',    plan_name       =>'SQL_PLAN_47akp7tt7azh16a45e050');  DBMS_OUTPUT.put_line('Plans Packed: ' || l_plans_packed); END;   3、将chad_spm_migrate传输到目标库,可以使用exp/imp ; 4、 将chad_spm_migrate导入目标库  SET SERVEROUTPUT ON DECLARE l_plans_unpacked  PLS_INTEGER; BEGIN l_plans_unpacked := DBMS_SPM.unpack_stgtab_baseline(    table_name      =>'chad_spm_migrate',    table_owner     => 'DBMGR',    sql_handle      => 'SQL_43aa553e72757e01',    plan_name       =>'SQL_PLAN_47akp7tt7azh16a45e050'    ); DBMS_OUTPUT.put_line('Plans Unpacked: ' || l_plans_unpacked); END; / select sysdate,        se.username,        se.sid,        se.serial#,        se.status,        se.machine,        se.osuser,        round(st.value / 1024 / 1024) redosize_MB,        sa.sql_text   from v$session se, v$sesstat st, v$sqlarea sa where se.sid = st.sid    and st.STATISTIC# =        (select STATISTIC# from v$statname where NAME = 'redo size')       --and se.username is not null    and st.value > 10 * 1024 * 1024    and se.SQL_ADDRESS = sa.ADDRESS    and se.SQL_HASH_VALUE = sa.HASH_VALUE order by redosize_MB desc; select t1.sid,        t1.REDO_GB,        t2.status,        t2.serial#,        t2.username,        t2.OSUSER,        t2.MODULE,        t2.event,        t2.last_call_et,        t2.machine   from (select m.sid, round(m.value / 1024 / 1024 / 1024, 6) REDO_GB           from v$sesstat m, v$statname s          where m.statistic# = s.statistic#            and s.name = 'redo size'          order by m.value desc) t1,        v$session t2 where t1.sid = t2.sid    and rownum < 10;   ------DB BLOCK CHANGE情况 SELECT to_char(begin_interval_time,'YY-MM-DD HH24') snap_time,         dhso.object_name,         sum(db_block_changes_delta) BLOCK_CHANGED   FROM dba_hist_seg_stat dhss,        dba_hist_seg_stat_obj dhso,        dba_hist_snapshot dhs   WHERE dhs.snap_id = dhss.snap_id     AND dhs.instance_number = dhss.instance_number     AND dhss.obj# = dhso.obj#     AND dhss.dataobj# = dhso.dataobj#     AND begin_interval_time BETWEEN to_date('2018-03-09 10:00','YY-MM-DD HH24:MI')                                 AND to_date('2018-03-09 14:00','YY-MM-DD HH24:MI')     and dhss.TS#=2   GROUP BY to_char(begin_interval_time,'YY-MM-DD HH24'),            dhso.object_name   HAVING sum(db_block_changes_delta) > 0 ORDER BY sum(db_block_changes_delta) desc ; select    s.sid,s.serial#,    s.username,s.module,s.status,s.last_call_et,    --r.name       "RBS name",    t.start_time --,    --t.used_ublk  "Undo blocks",    --t.used_urec  "Undo recs" from v$session s, v$transaction t, v$rollname r where t.addr = s.taddr and r.usn  = t.xidusn order by t.start_time desc; --DB CPU/time with t as (select max(t.snap_id) over() max_snap_id,          t.snap_id,          t.stat_name,          ((max(value)           over(partition by t.stat_name order by t.snap_id                 rows BETWEEN unbounded preceding AND unbounded following)) -          (min(value)           over(partition by t.stat_name order by t.snap_id                 rows BETWEEN unbounded preceding AND unbounded following))) value     from dba_hist_sys_time_model t, dba_hist_snapshot snap    where t.stat_name in ('DB CPU', 'DB time')      and t.snap_id = snap.snap_id      and snap.end_interval_time between        to_date('&begin_time', 'YYYY-MM-DD HH24:MI:SS') and        to_date('&end_time', 'YYYY-MM-DD HH24:MI:SS')   ) select t.stat_name,        decode(t.stat_name,               'DB CPU',               round(t.value / 1000000 / 60, 2),               'DB time',               round(t.value / 1000000 / 60, 2),               0) time   from t where t.snap_id = t.max_snap_id; --buffer hit with r as (select max(s.snap_id) over() max_snap_id,          s.stat_name,          s.snap_id,          ((max(value)           over(partition by s.stat_name order by s.snap_id                 rows BETWEEN unbounded preceding AND unbounded following)) -          (min(value)           over(partition by s.stat_name order by s.snap_id                 rows BETWEEN unbounded preceding AND unbounded following))) value     from dba_hist_sysstat s, dba_hist_snapshot snap    where s.snap_id = snap.snap_id      and s.stat_name in          ('physical reads direct', 'physical reads', 'session logical reads')      and snap.end_interval_time between        to_date('&begin_time', 'YYYY-MM-DD HH24:MI:SS') and        to_date('&end_time', 'YYYY-MM-DD HH24:MI:SS')), rr as (select max(decode(r.stat_name, 'session logical reads', r.value, 0)) lr,          max(decode(r.stat_name, 'physical reads', r.value, 0)) pr,          max(decode(r.stat_name, 'physical reads direct', r.value, 0)) prd     from r    where r.snap_id = r.max_snap_id) select round(rr.pr / 3600, 2) physical_reads_ps,        round((1 - (rr.pr - rr.prd) / rr.lr) * 100, 2) buffer_hit   from rr;          --event1   select  max(sum(nvl(case                when event = 'log file sync' then                 round(times, 2)              end,             0))) as "log file sync", max(sum(nvl(case                when event = 'log file parallel write' then                 round(times, 2)              end,              0))) as "log file parallel write",               max(sum(nvl(case                when event = 'db file sequential read' then                 round(times, 2)              end,              0))) as "db file sequential read", max(sum(nvl(case                when event = 'db file parallel write' then                 round(times, 2)              end,              0))) as "db file parallel write", max(sum(nvl(case                when event = 'direct path read' then                 round(times, 2)              end,              0))) as "direct path read"   from (select t.snap_id,                to_char(b.begin_interval_time, 'yyyy-mm-dd hh24:mi:ss') stime,                event_name event,                decode(sign(total_waits - lag(total_waits, 1)                            over(partition by event_name order by t.snap_id)),                       -1,                       (lag(time_waited_micro, 1)                        over(partition by event_name order by t.snap_id)) /                       (lag(total_waits, 1)                        over(partition by t.instance_number,                             event_name order by t.snap_id)),                       0,                       0,                       (time_waited_micro - lag(time_waited_micro, 1)                        over(partition by event_name order by t.snap_id)) /                      (total_waits - lag(total_waits, 1)                        over(partition by event_name order by t.snap_id))) / 1000 as times           from dba_hist_system_event t, dba_hist_snapshot b          where t.snap_id = b.snap_id            and b.begin_interval_time between                to_date('&begin_time', 'YYYY-MM-DD HH24:MI:SS') and                to_date('&end_time', 'YYYY-MM-DD HH24:MI:SS')            and b.instance_number = t.instance_number            and event_name in ('db file sequential read',                               'log file sync',                               'direct path read',                               'log file parallel write',                               'db file parallel write')            and t.instance_number = 1) where times > 0 group by snap_id, stime order by snap_id; select t.snap_id,                to_char(b.begin_interval_time, 'yyyy-mm-dd hh24:mi:ss') stime,                event_name event,                decode(sign(total_waits - lag(total_waits, 1)                            over(partition by event_name order by t.snap_id)),                       -1,                       (lag(time_waited_micro, 1)                        over(partition by event_name order by t.snap_id)) /                       (lag(total_waits, 1)                        over(partition by t.instance_number,                             event_name order by t.snap_id)),                       0,                       0,                       (time_waited_micro - lag(time_waited_micro, 1)                        over(partition by event_name order by t.snap_id)) /                      (total_waits - lag(total_waits, 1)                        over(partition by event_name order by t.snap_id))) / 1000 as times           from dba_hist_system_event t, dba_hist_snapshot b          where t.snap_id = b.snap_id            and b.begin_interval_time between                to_date('&begin_time', 'YYYY-MM-DD HH24:MI:SS') and                to_date('&end_time', 'YYYY-MM-DD HH24:MI:SS')            and b.instance_number = t.instance_number            and event_name in ('db file sequential read',                               'log file sync',                               'direct path read',                               'log file parallel write',                               'db file parallel write')            and t.instance_number = 1    --event2 for latch and enq select event,times from ( select event,round(avg(times),2) times from   ( select t.snap_id,                to_char(b.begin_interval_time, 'yyyy-mm-dd hh24:mi:ss') stime,                event_name event,                decode(sign(total_waits - lag(total_waits, 1)                            over(partition by event_name order by t.snap_id)),                       -1,                       (lag(time_waited_micro, 1)                        over(partition by event_name order by t.snap_id)) /                       (lag(total_waits, 1)                        over(partition by t.instance_number,                             event_name order by t.snap_id)),                       0,                       0,                       (time_waited_micro - lag(time_waited_micro, 1)                        over(partition by event_name order by t.snap_id)) /                       (total_waits - lag(total_waits, 1)                        over(partition by event_name order by t.snap_id))) / 1000 as times           from dba_hist_system_event t, dba_hist_snapshot b          where t.snap_id = b.snap_id            and b.begin_interval_time between                to_date('&begin_time', 'YYYY-MM-DD HH24:MI:SS') and                to_date('&end_time', 'YYYY-MM-DD HH24:MI:SS')            and b.instance_number = t.instance_number            and (event_name like'%enq%' or event_name like'%latch%')            and t.instance_number = 1 )            where times is not null            and times <>0            group by event            order by 2 desc) where times<>0; --maximum PGA allocated select ROUND(max(value) / 1024 / 1024 / 1024, 2) PGA_G   from dba_hist_pgastat p, dba_hist_snapshot s where name = 'maximum PGA allocated'    and s.end_interval_time between        to_date('&begin_time', 'YYYY-MM-DD HH24:MI:SS') and        to_date('&end_time', 'YYYY-MM-DD HH24:MI:SS')    and p.snap_id = s.snap_id;         --fra select b.TOTAL_G,        b."TOTAL_G" * (1 - a."USED") "FREE_G",        b."TOTAL_G" * (1 - a."USED" + a."RECLAIMABLE") "free+reclaimable_G",        round((a."USED") * 100 , 2) || ' %' as pct_used   from (select sum(xx.PERCENT_SPACE_USED) / 100 "USED",                sum(xx.PERCENT_SPACE_RECLAIMABLE) / 100 "RECLAIMABLE"           from v$flash_recovery_area_usage xx) a,        (select round(value / 1024 / 1024 / 1024) "TOTAL_G"           from v$parameter          where name = 'db_recovery_file_dest_size') b; ---undostat select to_char(begin_time, 'yyyymmdd hh24'),        sum(trunc(undoblks * 8192 / 1024 / 1024))   from v$undostat where begin_time between trunc(sysdate - 1 / 24, 'hh24') and        trunc(sysdate, 'hh24') group by to_char(begin_time, 'yyyymmdd hh24');  --hard parse with t1 as ( select s.instance_number,s.snap_id,to_char(t.begin_interval_time,'yyyy/mm/dd hh24:mi:ss') time,stat_name,value from dba_hist_sysstat s ,dba_hist_snapshot t where   s.instance_number=1   and s.stat_name='parse count (hard)' and s.snap_id=t.snap_id and t.instance_number=1 order by 1 desc ), t2 as  ( select s.instance_number,s.snap_id,to_char(t.begin_interval_time,'yyyy/mm/dd hh24:mi:ss') time,stat_name,value from dba_hist_sysstat s ,dba_hist_snapshot t where    s.instance_number=1 and s.stat_name='parse count (hard)' and s.snap_id=t.snap_id and t.instance_number=1 order by 1 desc ) select t1.instance_number,t1.snap_id,t1.time,t1.stat_name,(t1.value-t2.value) value from t1,t2 where t1.snap_id=t2.snap_id+1 order by t1.snap_id desc select a.tablespace_name,sum(bytes)/1024/1024/1024 from dba_segments a,dba_lobs b where a.tablespace_name='USERS' and a.segment_name= b.segment_name and b.owner='AUDSYS' group by a.tablespace_name;   select a.snap_id,        b.begin_interval_time,        rows_processed_delta / executions_delta ROWS_PROCESSED_PER_EXECTIONS,        a.sql_id,        c.sql_text,        a.parsing_schema_name,        executions_delta,        decode(c.command_type,               2,               'INSERT',               6,               'UPDATE',               7,               'DELETE',               189,               'MERGE') "DML_TYPE"   from dba_hist_sqlstat a, dba_hist_snapshot b, dba_hist_sqltext c  where a.snap_id = b.snap_id    and a.sql_id = c.sql_id(+)    and executions_delta <> 0    and c.command_type in (2, 6, 7, 189)    and rows_processed_delta / executions_delta >= 10000    and a.snap_id between 68050 and 68056  order by ROWS_PROCESSED_PER_EXECTIONS desc        select SNAP_ID,OWNER ,OBJECT_NAME, OBJECT_TYPE, DB_BLOCK_CHANGES_DELTA from dba_objects a, (select SNAP_ID,obj#,DB_BLOCK_CHANGES_DELTA from DBA_HIST_SEG_STAT where DB_BLOCK_CHANGES_DELTA > 20000 order by snap_id desc, DB_BLOCK_CHANGES_DELTA desc) b where a.object_id=b.obj# and object_type='TABLE' order by snap_id desc, DB_BLOCK_CHANGES_DELTA desc select c.SNAP_ID,c.END_INTERVAL_TIME SNAP_TIME,a.OWNER ,a.OBJECT_NAME, a.OBJECT_TYPE, b.DB_BLOCK_CHANGES_DELTA from dba_objects a, (select SNAP_ID,obj#,DB_BLOCK_CHANGES_DELTA from DBA_HIST_SEG_STAT where DB_BLOCK_CHANGES_DELTA > 20000 order by snap_id desc, DB_BLOCK_CHANGES_DELTA desc) b, DBA_HIST_SNAPSHOT c where a.object_id=b.obj# and object_type='TABLE' and b.SNAP_ID=c.SNAP_ID order by snap_id desc, DB_BLOCK_CHANGES_DELTA desc       SELECT SE.SID, OPNAME, TRUNC(SOFAR / TOTALWORK * 100, 2) || '%' AS PCT_WORK, ELAPSED_SECONDS ELAPSED, ROUND(ELAPSED_SECONDS * (TOTALWORK - SOFAR) / SOFAR) REMAIN_TIME FROM V$SESSION_LONGOPS SL, V$SQLAREA SA, V$SESSION SE WHERE SL.SQL_PLAN_HASH_VALUE = SA.PLAN_HASH_VALUE AND SL.SID = SE.SID AND SOFAR != TOTALWORK and sl.SID='1920' ORDER BY START_TIME;     select end_time, process from (select to_char(trunc(end_time,'mi'), 'YYYY-MM-DD HH24:MI:SS') end_time,                    2   round(value*limit_value/100) process from v$sysmetric_history,(select limit_value from v$resource_limit where resource_name = 'processes') where metric_name = 'Process Limit %'); ------cpu_time select * from (select round(nvl((sqt.cput / 1000000), to_number(null)),2) "Cpu Time (s)",               round( nvl((sqt.elap / 1000000), to_number(null)),2) "Elap Time (s)",                sqt.exec,                round(decode(sqt.exec,0,to_number(null),(sqt.cput / sqt.exec / 1000000)),2) "Cpu per Exec (s)",                round((100 * (sqt.elap / (select sum(e.value) - sum(b.value)                                from dba_hist_sys_time_model b,                                     dba_hist_sys_time_model e                               where b.snap_id = 21890 and                                     e.snap_id = 21891 and                                     e.stat_name = 'DB time' and                                     b.stat_name = 'DB time'))) ,2)norm_val,                sqt.sql_id,                decode(sqt.module, null, null, 'Module: ' || sqt.module) SqlModule,                nvl(to_nchar(SUBSTR(st.sql_text,1,2000)) , (' ** SQL Text Not Available ** ')) SqlText           from (select sql_id,                        max(module) module,                        sum(cpu_time_delta) cput,                        sum(elapsed_time_delta) elap,                        sum(executions_delta) exec                   from dba_hist_sqlstat                  where 21890 < snap_id and                        snap_id <= 21891                  group by sql_id) sqt,                dba_hist_sqltext st          where st.sql_id(+) = sqt.sql_id          order by nvl(sqt.cput, -1) desc,                   sqt.sql_id)  where rownum < 65 and        (rownum <= 10 or norm_val > 1) select se.USERNAME,se.SID,se.SERIAL#,se.STATUS,SE.EVENT,SE.P1,SE.P1TEXT,        round(decode(tr.USED_UBLK,null,0,tr.USED_UBLK) * (select value from v$parameter where NAME='db_block_size') /1024/1024/1024,4)  as undo_size_gb ,        tr.USED_UREC,se.SQL_ID,s.SQL_TEXT from gv$session se, gv$transaction tr,gv$sql s where se.TADDR=tr.ADDR(+) and se.SQL_ID = s.SQL_ID(+) order by undo_size_gb desc select ds.segment_name "Object Name", round(sum(space_allocated_total) / 1024 / 1024) "Growth (MB)" , round(sum(space_used_delta)/1024/1204) from dba_hist_snapshot dhs, dba_hist_seg_stat dhss, dba_objects db, dba_segments ds where begin_interval_time > trunc(sysdate) - &days_back and dhs.snap_id = dhss.snap_id and db.object_id = dhss.obj# and db.owner = ds.owner and db.object_name = ds.segment_name group by ds.segment_name having sum(space_allocated_delta) / 1024 / 1024 >5000 order by 3 desc 1. 查看数据库具体时间点的Block change TOP N,这个AWR中也有 select to_char(begin_interval_time, 'yyyy-mm-dd hh24:mi') snap_time,        sto.object_name,        sum(db_block_changes_delta)   from dba_hist_seg_stat     st,        dba_hist_seg_stat_obj sto,        dba_hist_snapshot     ss where ss.snap_id = st.snap_id    and ss.instance_number = st.instance_number    and st.obj# = sto.obj#    and st.dataobj# = sto.dataobj#    and begin_interval_time > sysdate - 1 / 24 group by to_char(begin_interval_time, 'yyyy-mm-dd hh24:mi'),           sto.object_name order by 3 desc; 2. 查看对应时间的sqlstat,这里边对应的sql一般都会是引起日志突增的语句,因为执行次数,以及rows processed比其他sql要高。这个AWR中也会有。 select to_char(begin_interval_time, 'yyyy_mm_dd hh24:mi'),        dbms_lob.substr(sql_text, 4000, 1),        sst.instance_number,        sst.sql_id,        executions_delta,        rows_processed_delta   from dba_hist_sqlstat sst, dba_hist_snapshot ss, dba_hist_sqltext st where upper(st.sql_text) like '%JSMX_KC22_02%'    and sst.snap_id = ss.snap_id    and sst.instance_number = ss.instance_number    and sst.sql_id = st.sql_id; 3. 我们还可以进一步在分析数据库代码,帮助开发解决问题。这里使用ash试图,11g以上有top_level_sql_id,这个表示对于递归SQL,捕获其父SQL的信息。一般对定位package/function/trigger等引起的异常非常有用。 当top_level_sql_id为package时,我们需要进一步分析是哪一段代码异常,是否是逻辑错误,重复更新等问题。这里就不在讨论了,具体应用场景不同,相信大家都有很厉害的PLSQL技能。 本次异常可以看到是kettle推数和运营采集数据导致的。联系DA或者直接找开发看看采数是否每月常规还是异常,是否需要扩容FRA。 select sql_id, s.top_level_sql_id,u.username   from v$active_session_history s,dba_users u where s.sql_id = '4qappnkgxtrtj' and s.user_id=u.user_id;     v$sga_resize_op    select *   from (select t.sample_time,                s.PARSING_SCHEMA_NAME,                t.sql_id,                t.sql_child_number as sql_child,                round(t.temp_space_allocated / 1024 / 1024 / 1024, 2) || ' G' as temp_used,                round(t.temp_space_allocated /                      (select sum(decode(d.autoextensible, 'YES', d.maxbytes, d.bytes))                         from dba_temp_files d),                      2) * 100 || ' %' as temp_pct,                t.program,                t.module,                s.SQL_TEXT           from v$active_session_history t, v$sql s          where t.sample_time > to_date('&begin_time', 'yyyy-mm-dd hh24:mi:ss')            and t.sample_time < to_date('&end_time', 'yyyy-mm-dd hh24:mi:ss')            and t.temp_space_allocated is not null            and t.sql_id = s.SQL_ID          order by t.temp_space_allocated desc)  where rownum < 50  order by temp_used desc;   在标黄处选择owner,或者去掉选择全库。 这个脚本将最多处理8列外键约束(如果你的外键有更多的列,可能就得重新考虑一下你的设计了) select table_name, constraint_name, cname1 || nvl2(cname2,','||cname2,null) || nvl2(cname3,','||cname3,null) || nvl2(cname4,','||cname4,null) || nvl2(cname5,','||cname5,null) || nvl2(cname6,','||cname6,null) || nvl2(cname7,','||cname7,null) || nvl2(cname8,','||cname8,null) columns from ( select b.table_name, b.constraint_name, max(decode( position, 1, column_name, null )) cname1, max(decode( position, 2, column_name, null )) cname2, max(decode( position, 3, column_name, null )) cname3, max(decode( position, 4, column_name, null )) cname4, max(decode( position, 5, column_name, null )) cname5, max(decode( position, 6, column_name, null )) cname6, max(decode( position, 7, column_name, null )) cname7, max(decode( position, 8, column_name, null )) cname8, count(*) col_cnt from (select substr(table_name,1,30) table_name, substr(constraint_name,1,30) constraint_name, substr(column_name,1,30) column_name, position from dba_cons_columns ) a, dba_constraints b where a.constraint_name = b.constraint_name and b.constraint_type = 'R' and b.owner='PASDATA' group by b.table_name, b.constraint_name ) cons where col_cnt > ALL ( select count(*) from dba_ind_columns i where i.table_name = cons.table_name and i.column_name in (cname1, cname2, cname3, cname4, cname5, cname6, cname7, cname8 ) and i.column_position <= cons.col_cnt group by i.index_name ) ;       SELECT  SES.sid,         SES.serial#,         SES.process,         SES.username,         SES.command,         SES.osuser,         SES.machine,         SES.program,         SES.sql_id,         SES.sql_exec_id,         SES.sql_exec_start,         SES.plsql_entry_object_id,         SES.sql_child_number,         SES.module,         SES.action,         SES.client_info,                  SES.row_wait_obj#,         SES.logon_time,         SES.resource_consumer_group,         SES.event,         SES.p1text,         SES.p1,         SES.wait_class,         SES.wait_time,         SES.wait_time_micro,         SE.time_waited_micro,         SES.state,         SES.time_remaining_micro,         SES.time_since_last_wait_micro,         SES.service_name,         STAT.cpu_time,         GV_INST.INSTANCE_NAME blck_instance_name,         BLCK.sid blck_sid,         BLCK.serial# blck_serial#,         BLCK.logon_time blck_logon_time,         BLCK.machine blck_machine,         BLCK.program blck_program,         BLCK.USERNAME blck_username FROM V$SESSION SES JOIN v$session_event SE ON (SES.EVENT=SE.EVENT and SES.SID=SE.SID and SES.WAIT_CLASS#=SE.WAIT_CLASS#) LEFT JOIN GV$INSTANCE GV_INST ON (SES.BLOCKING_INSTANCE = GV_INST.INSTANCE_NUMBER) JOIN (   SELECT sid, VALUE cpu_time   FROM V$SESSTAT JOIN V$STATNAME USING (STATISTIC#)   WHERE name = 'CPU used by this session' ) STAT ON (SES.sid = STAT.sid) LEFT JOIN (   SELECT  inst_id,           sid,           serial#,           logon_time,           machine,           program,           username   FROM GV$SESSION ) BLCK ON (SES.blocking_session = blck.sid AND SES.blocking_instance = blck.inst_id) WHERE SES.STATUS = 'ACTIVE' AND SES.sql_id IS NOT NULL AND rownum <= 20  AND (SES.client_info not like '%Oracle-SPI%' OR client_info IS NULL)  AND TYPE = 'USER'                ========db stats===========  with t as                          (select max(t.snap_id) over() max_snap_id,                                  t.snap_id,                                  t.stat_name,                                  ((max(value)                                   over(partition by t.stat_name order by t.snap_id                                         rows BETWEEN unbounded preceding AND unbounded following)) -                                  (min(value)                                   over(partition by t.stat_name order by t.snap_id                                         rows BETWEEN unbounded preceding AND unbounded following))) value                             from dba_hist_sys_time_model t, dba_hist_snapshot snap                            where t.stat_name in ('DB CPU', 'DB time')                              and t.snap_id = snap.snap_id                              and snap.end_interval_time > sysdate - 1 / 24)                         select t.stat_name,                                decode(t.stat_name,                                       'DB CPU',                                       round(t.value / 1000000),                                       'DB time',                                       round(t.value / 1000000 / 60, 2),                                       0) time                           from t                          where t.snap_id = t.max_snap_id                         union                         select 'physical_reads_psround' as name, round(rr.pr / 3600, 2) valuse                           from (select max(decode(r.stat_name, 'session logical reads', r.value, 0)) lr,                                        max(decode(r.stat_name, 'physical reads', r.value, 0)) pr,                                        max(decode(r.stat_name, 'physical reads direct', r.value, 0)) prd                                   from ((select max(s.snap_id) over() max_snap_id,                                                 s.stat_name,                                                 s.snap_id,                                                 ((max(value)                                                  over(partition by s.stat_name order by s.snap_id                                                        rows BETWEEN unbounded preceding AND unbounded                                                        following)) -                                                 (min(value)                                                  over(partition by s.stat_name order by s.snap_id                                                        rows BETWEEN unbounded preceding AND unbounded                                                        following))) value                                            from dba_hist_sysstat s, dba_hist_snapshot snap                                           where s.snap_id = snap.snap_id                                             and s.stat_name in                                                 ('physical reads direct',                                                  'physical reads',                                                  'session logical reads')                                             and snap.end_interval_time > sysdate - 1 / 24)) r                                  where r.snap_id = r.max_snap_id) rr                         union                         select 'buffer_hit' as name,                                round((1 - (rr.pr - rr.prd) / rr.lr) * 100, 2) valuse                           from (select max(decode(r.stat_name, 'session logical reads', r.value, 0)) lr,                                        max(decode(r.stat_name, 'physical reads', r.value, 0)) pr,                                        max(decode(r.stat_name, 'physical reads direct', r.value, 0)) prd                                   from ((select max(s.snap_id) over() max_snap_id,                                                 s.stat_name,                                                 s.snap_id,                                                 ((max(value)                                                  over(partition by s.stat_name order by s.snap_id                                                        rows BETWEEN unbounded preceding AND unbounded                                                        following)) -                                                 (min(value)                                                  over(partition by s.stat_name order by s.snap_id                                                        rows BETWEEN unbounded preceding AND unbounded                                                        following))) value                                            from dba_hist_sysstat s, dba_hist_snapshot snap                                           where s.snap_id = snap.snap_id                                             and s.stat_name in                                                 ('physical reads direct',                                                  'physical reads',                                                  'session logical reads')                                             and snap.end_interval_time > sysdate - 1 / 24)) r                                  where r.snap_id = r.max_snap_id) rr                         union (select event, round(max(times), 2) as value                                  from (select t.snap_id,                                               to_char(b.begin_interval_time, 'yyyy-mm-dd hh24:mi:ss') stime,                                               event_name event,                                               decode(sign(total_waits - lag(total_waits, 1)                                                           over(partition by event_name order by                                                                t.snap_id)),                                                      -1,                                                      (lag(time_waited_micro, 1)                                                       over(partition by event_name order by t.snap_id)) /                                                      (lag(total_waits, 1)                                                       over(partition by t.instance_number,                                                            event_name order by t.snap_id)),                                                      0,                                                      0,                                                      (time_waited_micro - lag(time_waited_micro, 1)                                                       over(partition by event_name order by t.snap_id)) /                                                      (total_waits - lag(total_waits, 1)                                                       over(partition by event_name order by t.snap_id))) / 1000 as times                                          from dba_hist_system_event t, dba_hist_snapshot b                                         where t.snap_id = b.snap_id                                           and b.begin_interval_time > sysdate - 1 / 24                                           and b.instance_number = t.instance_number                                           and event_name in ('db file sequential read',                                                              'log file sync',                                                              'direct path read',                                                              'log file parallel write',                                                              'db file parallel write')                                           and t.instance_number = 1)                                 where times > 0                                 group by event)                         union (select 'PGA' as names,                                       ROUND(max(value) / 1024 / 1024 / 1024, 2) PGA_G                                  from dba_hist_pgastat p, dba_hist_snapshot s                                 where name = 'maximum PGA allocated'                                   and s.end_interval_time > sysdate - 1 / 24                                   and p.snap_id = s.snap_id)                         union (select 'FRA' as name, pct_used                                  from (select b.TOTAL_G,                                               b."TOTAL_G" * (1 - a."USED") "FREE_G",                                               b."TOTAL_G" * (1 - a."USED" + a."RECLAIMABLE") "free+reclaimable_G",                                               round((a."USED" - a."RECLAIMABLE") * 100, 2) as pct_used                                          from (select sum(xx.PERCENT_SPACE_USED) / 100 "USED",                                                       sum(xx.PERCENT_SPACE_RECLAIMABLE) / 100 "RECLAIMABLE"                                                  from v$flash_recovery_area_usage xx) a,                                               (select round(value / 1024 / 1024 / 1024) "TOTAL_G"                                                  from v$parameter                                                 where name = 'db_recovery_file_dest_size') b))                         union (                         select name, sum(cnt)                           from (select case                                          when event like '%latch%' then                                           'latch'                                          else                                           'enq'                                        end as name,                                        count(*) as cnt                                   from v$session_wait                                  where (event like '%latch%' or event like '%enq%')                                  group by event                                 union                                 select 'latch', 0                                   from dual                                 union                                 select 'enq', 0 from dual)                         group by name                         )                         union                             (select 'sessions' as name, count(*)                               from v$session                               where status='ACTIVE'                             ) SELECT s.sid, kglpnmod "Mode", kglpnreq "Req"     FROM x$kglpn p, v$session s    WHERE p.kglpnuse=s.saddr      AND kglpnhdl='&P1RAW'   ; 在 后台用这个语句查一下,看那些是holder select * from ( SELECT to_char(begin_interval_time, 'YYYY_MM_DD HH24:MI') snap_time,        dhsso.object_name,        SUM(db_block_changes_delta)   FROM dba_hist_seg_stat     dhss,        dba_hist_seg_stat_obj dhsso,        dba_hist_snapshot     dhs  WHERE dhs.snap_id = dhss.snap_id    AND dhs.instance_number = dhss.instance_number    AND dhss.obj# = dhsso.obj#    AND dhss.dataobj# = dhsso.dataobj#    AND begin_interval_time> sysdate - 120/1440  GROUP BY to_char(begin_interval_time, 'YYYY_MM_DD HH24:MI'),           dhsso.object_name  order by 3 desc)  where rownum<=5; SELECT to_char(begin_interval_time, 'YYYY_MM_DD HH24:MI'),        dbms_lob.substr(sql_text, 4000, 1),        dhss.instance_number,        dhss.sql_id,        executions_delta,        rows_processed_delta   FROM dba_hist_sqlstat dhss, dba_hist_snapshot dhs, dba_hist_sqltext dhst  WHERE UPPER(dhst.sql_text) LIKE '%TEST_REDO%'    AND dhss.snap_id = dhs.snap_id    AND dhss.instance_Number = dhs.instance_number    AND dhss.sql_id = dhst.sql_id;   begin  DBMS_LOGMNR.ADD_LOGFILE( LOGFILENAME => '/paic/stg/oracle/10g/otzj10g/wangsj/arch_620991420_1_339608.arc',OPTIONS => DBMS_LOGMNR.NEW); DBMS_LOGMNR.ADD_LOGFILE( LOGFILENAME => '/paic/stg/oracle/10g/otzj10g/wangsj/arch_620991420_1_339609.arc',OPTIONS => DBMS_LOGMNR.addfile); DBMS_LOGMNR.START_LOGMNR( OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);  end; / select to_char(t.TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS'), to_char(t.COMMIT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS'), t.SEG_OWNER, t.SEG_NAME, t.USERNAME, t.OPERATION, t.SQL_REDO from V$LOGMNR_CONTENTS t where t.SEG_NAME='PS_PAIC_PLAN_SEQ' --upper(t.SQL_REDO) like '%PS_PAIC_PLAN_SEQ%'; EXECUTE DBMS_LOGMNR.END_LOGMNR(); 1、将PUB_SYS_PACKAGE标记为HOT; begin sys.dbms_shared_pool.markhot(schema => 'ELISCDE',objname => 'PUB_SYS_PACKAGE',namespace => 1,global => true); end; / begin sys.dbms_shared_pool.markhot(schema => 'ELISCDE',objname => 'PUB_SYS_PACKAGE',namespace => 2,global => true); end; / 2、确认标记是否成功; select count(*) from v$db_object_cache where  name='PUB_SYS_PACKAGE' and property='HOT';          monitoring监控状态 SELECT u.name owner,        io.name index_name,        t.name table_name,        DECODE(BITAND(i.flags, 65536), 0, 'NO', 'YES') monitoring,        DECODE(BITAND(ou.flags, 1), 0, 'NO', 'YES') used,        ou.start_monitoring start_monitoring,        ou.end_monitoring end_monitoring   FROM sys.user$        u,        sys.obj$         io,        sys.obj$         t,        sys.ind$         i,        sys.object_usage ou  WHERE i.obj# = ou.obj#    AND io.obj# = ou.obj#    AND t.obj# = i.bo#    AND u.user# = io.owner#    and u.name = 'CISDATA'    and DECODE(BITAND(ou.flags, 1), 0, 'NO', 'YES')='YES';       alter table *.* allocate extent (SIZE 5G); select s.username,        s.sid,        a.value as cursor´ò¿ªÁ¿,        (select y.VALUE from v$parameter y where y.NAME like '%open_cursors%') as ÉÏÏÞ   from v$sesstat a, v$statname b, v$session s  where a.statistic# = b.statistic#    and s.sid = a.sid    and b.name = 'opened cursors current'    and a.value >        (select y.VALUE from v$parameter y where y.NAME like '%open_cursors%') * 0.8  order by value desc       wait  and lock SELECT /*+ ordered */ gvw.inst_id Waiter_Inst,  gvw.sid Waiter_Sid,  gvs_w.osuser waiter_osuser,  gvs_w.program waiter_program,  gvs_w.machine waiter_machine,  gvs_w.client_identifier waiter_identifer,  gvs_w.client_info waiter_thread,  gvs_w.seconds_in_wait waiter_secs_in_wait,  gvs_w.sql_id waiter_sql,  (select object_name from dba_objects a where a.object_id(+)=gvs_w.row_wait_obj#) waiter_table,  dbms_rowid.rowid_create(1,gvs_w.ROW_WAIT_OBJ#,gvs_w.ROW_WAIT_FILE#,gvs_w.ROW_WAIT_BLOCK#,gvs_w.ROW_WAIT_ROW#) waiter_rowid_Waiting_on, gvs_w.event waiter_event, decode(gvw.request, 0, 'None',  1, 'NoLock',  2, 'Row-Share',  3, 'Row-Exclusive',  4, 'Share-Table',  5, 'Share-Row-Exclusive',  6, 'Exclusive',  'Nothing-') Waiter_Mode_Req,  decode(gvh.type, 'MR', 'Media_recovery',  'RT', 'Redo_thread',  'UN', 'User_name',  'TX', 'Transaction',  'TM', 'Dml',  'UL', 'PLSQL User_lock',  'DX', 'Distrted_Transaxion',  'CF', 'Control_file',  'IS', 'Instance_state',  'FS', 'File_set',  'IR', 'Instance_recovery',  'ST', 'Diskspace Transaction',  'IV', 'Libcache_invalidation',  'LS', 'LogStaartORswitch',  'RW', 'Row_wait',  'SQ', 'Sequence_no',  'TE', 'Extend_table',  'TT', 'Temp_table',  'Nothing-') Waiter_Lock_Type,  gvh.inst_id Locker_Inst, gvh.sid Locker_Sid, gvs.osuser locker_osuser, gvs.machine locker_machine, gvs.program locker_program,  gvs.client_identifier locker_identifer,  gvs.client_info locker_thread,  gvs.seconds_in_wait locker_secs_in_wait, gvs.serial# Locker_Serial,gvs.event locker_event,gvs.sql_id locker_sql,(select object_name from dba_objects a where a.object_id(+)=gvs.row_wait_obj#) locker_table,gvs.prev_sql_id locker_prev_sql,  gvs.status locker_Status, gvs.module locker_Module  FROM gv$lock gvh, gv$lock gvw, gv$session gvs,gv$session gvs_w WHERE (gvh.id1, gvh.id2) in (  SELECT id1, id2 FROM gv$lock WHERE request=0  INTERSECT  SELECT id1, id2 FROM gv$lock WHERE lmode=0)  AND gvh.id1=gvw.id1  AND gvh.id2=gvw.id2  AND gvh.request=0  AND gvw.lmode=0  AND gvh.sid=gvs.sid  AND gvw.sid=gvs_w.sid  AND gvh.inst_id=gvs.inst_id  AND gvw.inst_id=gvs_w.inst_id  AND gvs_w.sql_id is not null; sqlt方法: Download SQLT from note 215187.1  $ unzip sqlt.zip  $ cd sqlt/install  $ sqlplus / as sysdba  SQL> START sqcreate.sql  Optional Connect Identifier (ie: @PROD): <just press ENTER> Password for user SQLTXPLAIN: <password of using sqlt> Default tablespace [UNKNOWN]:USERS Temporary tablespace [UNKNOWN]: TEMP Main application user of SQLT: <application user> Oracle Pack license [T]:T  2) Get the sql_id from v$sql, for example:  d9manhbn1a6t0  3) Run SQLT with sqltxtract method:  $ cd sqlt  $ sqlplus <application_user>/<passwd>  SQL> START run/sqltxtract.sql  d9manhbn1a6t0  Password: <password>  4) Upload the generated sqlt_s*.zip file to this SR $ ls sqlt_s* sqlt_s95236.zip  优化效率:  EXEC sqltxadmin.sqlt$a.set_param('test_case_builder', 'N'); EXEC sqltxadmin.sqlt$a.set_param('sta_time_limit_secs', '30'); EXEC sqltxadmin.sqlt$a.set_param('c_gran_segm', 'PARTITION'); EXEC sqltxadmin.sqlt$a.set_param('c_gran_cols', 'PARTITION'); EXEC sqltxadmin.sqlt$a.set_param('c_gran_hgrm', 'PARTITION');  sqlplus -prelim / as sysdba    oradebug setmypid    oradebug unlimit    oradebug setinst all   --RAC环境    oradebug hanganalyze 3  -- 级别一般指定为3足够了    oradebug -g def dump systemstate 10  --RAC环境    oradebug tracefile_name         systemdump方法: SSD:       conn / as sysdba  oradebug setmypid  oradebug unlimit  oradebug -g all hanganalyze 3  oradebug -g all dump systemstate 258  - -Wait for 10 seconds  oradebug -g all hanganalyze 3  oradebug -g all dump systemstate 258  oradebug close_trace  oradebug tracefile_name dba_hist_memory_resize_ops     select to_char(first_time, 'yyyy-mm-dd') day,            sum(decode(to_char(first_time, 'hh24'), '00', 1, 0)) h00,            sum(decode(to_char(first_time, 'hh24'), '01', 1, 0)) h01,            sum(decode(to_char(first_time, 'hh24'), '02', 1, 0)) h02,            sum(decode(to_char(first_time, 'hh24'), '03', 1, 0)) h03,            sum(decode(to_char(first_time, 'hh24'), '04', 1, 0)) h04,            sum(decode(to_char(first_time, 'hh24'), '05', 1, 0)) h05,            sum(decode(to_char(first_time, 'hh24'), '06', 1, 0)) h06,            sum(decode(to_char(first_time, 'hh24'), '07', 1, 0)) h07,            sum(decode(to_char(first_time, 'hh24'), '08', 1, 0)) h08,            sum(decode(to_char(first_time, 'hh24'), '09', 1, 0)) h09,            sum(decode(to_char(first_time, 'hh24'), '10', 1, 0)) h10,            sum(decode(to_char(first_time, 'hh24'), '11', 1, 0)) h11,            sum(decode(to_char(first_time, 'hh24'), '12', 1, 0)) h12,            sum(decode(to_char(first_time, 'hh24'), '13', 1, 0)) h13,            sum(decode(to_char(first_time, 'hh24'), '14', 1, 0)) h14,            sum(decode(to_char(first_time, 'hh24'), '15', 1, 0)) h15,            sum(decode(to_char(first_time, 'hh24'), '16', 1, 0)) h16,            sum(decode(to_char(first_time, 'hh24'), '17', 1, 0)) h17,            sum(decode(to_char(first_time, 'hh24'), '18', 1, 0)) h18,            sum(decode(to_char(first_time, 'hh24'), '19', 1, 0)) h19,            sum(decode(to_char(first_time, 'hh24'), '20', 1, 0)) h20,            sum(decode(to_char(first_time, 'hh24'), '21', 1, 0)) h21,            sum(decode(to_char(first_time, 'hh24'), '22', 1, 0)) h22,            sum(decode(to_char(first_time, 'hh24'), '23', 1, 0)) h23,            count(*) total       from gv$log_history a      where first_time >= trunc(sysdate) - 7      group by to_char(first_time, 'yyyy-mm-dd')      order by day;   select s.username,s.osuser,s.event,count(*) over(partition by event) event_count,        q.sql_text,q.sql_fulltext,s.status,q.sql_id,q.child_number,        q.plan_hash_value,s.sql_exec_start,s.machine,s.sid,s.serial#,        s.pq_status,s.pdml_status,s.pddl_status,        'alter system kill session '''||s.sid||','||s.serial#||''' immediate;' kill_session   from v$session s,v$sql q   where s.sql_id=q.sql_id     and s.username is not null    and event not in ('SQL*Net message from client','SQL*Net message to client') order by event_count desc,sql_id;   select t.snap_id,                to_char(b.begin_interval_time, 'yyyy-mm-dd hh24:mi:ss') stime,                event_name event,                decode(sign(total_waits - lag(total_waits, 1)                            over(partition by event_name order by t.snap_id)),                       -1,                       (lag(time_waited_micro, 1)                        over(partition by event_name order by t.snap_id)) /                       (lag(total_waits, 1)                        over(partition by t.instance_number,                             event_name order by t.snap_id)),                       0,                       0,                       (time_waited_micro - lag(time_waited_micro, 1)                        over(partition by event_name order by t.snap_id)) /                      (total_waits - lag(total_waits, 1)                        over(partition by event_name order by t.snap_id))) / 1000 as times           from dba_hist_system_event t, dba_hist_snapshot b          where t.snap_id = b.snap_id            and b.begin_interval_time between                to_date('&begin_time', 'YYYY-MM-DD HH24:MI:SS') and                to_date('&end_time', 'YYYY-MM-DD HH24:MI:SS')            and b.instance_number = t.instance_number            and event_name in ('db file sequential read',                               'log file sync',                               'direct path read',                               'log file parallel write',                               'db file parallel write')            and t.instance_number = 1) where times > 0 group by snap_id, stime order by snap_id; SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ    FROM SYS.x$ksppi x, SYS.x$ksppcv y    WHERE x.inst_id = USERENV ('Instance')    AND y.inst_id = USERENV ('Instance')    AND x.indx = y.indx    AND x.ksppinm LIKE '%&par%';  select ash.sql_id,        sum(nvl(TM_DELTA_CPU_TIME, 0)) as totalCPU,        count(*) as exectimes,        ar.sql_text   from v$active_session_history ash,v$sqlarea ar where sample_time >= to_timestamp('2019-09-26 18:34:00', 'yyyy-mm-dd hh24:mi:ss')    and sample_time <= to_timestamp('2019-09-26 19:55:00', 'yyyy-mm-dd hh24:mi:ss')    and ash.sql_id is not null    and ash.sql_id=ar.sql_id    group by ash.sql_id,ar.sql_text order by 2 desc    

相关推荐