zoukankan      html  css  js  c++  java
  • Script:List SORT ACTIVITY监控临时空间的使用

    以下脚本可以用于列出数据库内的排序活跃性能信息并监控临时空间的使用:
    REM SORT ACTIVITY
    
    set linesize 150 pagesize 1400;
    
        SELECT d.tablespace_name "Name", 
                    TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),'99,999,990.900') "Size (M)", 
                    TO_CHAR(NVL(t.hwm, 0)/1024/1024,'99999999.999')  "HWM (M)",
                    TO_CHAR(NVL(t.hwm / a.bytes * 100, 0), '990.00') "HWM % " ,
                    TO_CHAR(NVL(t.bytes/1024/1024, 0),'99999999.999') "Using (M)", 
    	        TO_CHAR(NVL(t.bytes / a.bytes * 100, 0), '990.00') "Using %" 
               FROM sys.dba_tablespaces d, 
                    (select tablespace_name, sum(bytes) bytes from dba_temp_files group by tablespace_name) a,
                    (select tablespace_name, sum(bytes_cached) hwm, sum(bytes_used) bytes from v$temp_extent_pool group by tablespace_name) t
              WHERE d.tablespace_name = a.tablespace_name(+) 
                AND d.tablespace_name = t.tablespace_name(+) 
                AND d.extent_management like 'LOCAL' 
                AND d.contents like 'TEMPORARY'
    /
    
    alter session set nls_date_format='dd-mon-yy';
    set lines 160 pages 1000 echo off feedback off
    col stat_name for a25
    col date_time for a40
    col BEGIN_INTERVAL_TIME for a20
    col END_INTERVAL_TIME for a20
    prompt "Enter the date in DD-Mon-YY Format and Stats you want to trend like 'redo size','physical reads','physical writes','session logical reads' etc."
    
    WITH sysstat AS
     (select sn.begin_interval_time begin_interval_time,
             sn.end_interval_time end_interval_time,
             ss.stat_name stat_name,
             ss.value e_value,
             lag(ss.value, 1) over(order by ss.snap_id) b_value
        from dba_hist_sysstat ss, dba_hist_snapshot sn
       where trunc(sn.begin_interval_time) >= sysdate-7
         and ss.snap_id = sn.snap_id
         and ss.dbid = sn.dbid
         and ss.instance_number = sn.instance_number
         and ss.dbid = (select dbid from v$database)
         and ss.instance_number = (select instance_number from v$instance)
         and ss.stat_name = 'sorts (disk)')
    select to_char(BEGIN_INTERVAL_TIME, 'mm/dd/yy_hh24_mi') || to_char(END_INTERVAL_TIME, '_hh24_mi') date_time,
    stat_name,
    round((e_value - nvl(b_value,0)) / (extract(day from(end_interval_time - begin_interval_time)) * 24 * 60 * 60
    + extract(hour from(end_interval_time - begin_interval_time)) * 60 * 60
    + extract(minute from(end_interval_time - begin_interval_time)) * 60 + extract(second from(end_interval_time - begin_interval_time))),0) per_sec
    from sysstat where(e_value - nvl(b_value,0)) > 0 and nvl(b_value,0) > 0
    /
    
    select temp_space/1024/1024,SQL_ID  from DBA_HIST_SQL_PLAN where temp_space>0 order by 1 asc;
    
    --For 8.1.7 to 9.2:
    
    SELECT a.username, a.sid, a.serial#, a.osuser, b.tablespace, b.blocks, c.sql_text
    FROM v$session a, v$sort_usage b, v$sqlarea c
    WHERE a.saddr = b.session_addr
    AND c.address= a.sql_address
    AND c.hash_value = a.sql_hash_value
    ORDER BY b.tablespace, b.blocks;
    
    --For 10.1 and above:
    
    SELECT a.username, a.sid, a.serial#, a.osuser, b.tablespace, b.blocks, c.sql_text
    FROM v$session a, v$tempseg_usage b, v$sqlarea c
    WHERE a.saddr = b.session_addr
    AND c.address= a.sql_address
    AND c.hash_value = a.sql_hash_value
    ORDER BY b.tablespace, b.blocks;
    
    SELECT S.sid || ',' || S.serial# sid_serial, S.username, S.osuser, P.spid, S.module,
    P.program, SUM (T.blocks) * TBS.block_size / 1024 / 1024 mb_used, T.tablespace,
    COUNT(*) statements
    FROM v$sort_usage T, v$session S, dba_tablespaces TBS, v$process P
    WHERE T.session_addr = S.saddr
    AND S.paddr = P.addr
    AND T.tablespace = TBS.tablespace_name
    GROUP BY S.sid, S.serial#, S.username, S.osuser, P.spid, S.module,
    P.program, TBS.block_size, T.tablespace
    ORDER BY sid_serial;
    
    SELECT *
      FROM (SELECT matching_criteria,
                   TO_CHAR(force_matching_signature) force_matching_signature,
                   sql_id,
                   child_number,
                   sql_text,
                   executions,
                   elapsed_time / 1000,
                   operation_type,
                   policy,
                   estimated_optimal_size,
                   last_memory_used,
                   last_execution,
                   active_time / 1000,
                   num_sort_operations,
                   tot_active_time / 1000,
                   tot_optimal_executions,
                   tot_onepass_executions,
                   tot_multipasses_executions,
                   all_tot_active_time / 1000,
                   max_tempseg_size,
                   parsing_schema_name
              FROM (SELECT force_matching_signature,
                           sql_id,
                           child_number,
                           sql_text,
                           matching_criteria,
                           SUM(executions) OVER(PARTITION BY matching_criteria) executions,
                           SUM(elapsed_time) OVER(PARTITION BY matching_criteria) elapsed_time,
                           operation_type,
                           policy,
                           estimated_optimal_size,
                           last_memory_used,
                           last_execution,
                           active_time,
                           num_sort_operations,
                           SUM(tot_active_time) OVER(PARTITION BY matching_criteria) tot_active_time,
                           SUM(tot_optimal_executions) OVER(PARTITION BY matching_criteria) tot_optimal_executions,
                           SUM(tot_onepass_executions) OVER(PARTITION BY matching_criteria) tot_onepass_executions,
                           SUM(tot_multipasses_executions) OVER(PARTITION BY matching_criteria) tot_multipasses_executions,
                           MAX(max_tempseg_size) OVER(PARTITION BY matching_criteria) max_tempseg_size,
                           SUM(tot_active_time) OVER() all_tot_active_time,
                           ROW_NUMBER() OVER(PARTITION BY matching_criteria ORDER BY tot_multipasses_executions DESC, tot_onepass_executions DESC, last_memory_used DESC) rnum,
                           parsing_schema_name
                      FROM (SELECT s.sql_id,
                                   s.child_number,
                                   s.sql_text,
                                   s.executions,
                                   s.elapsed_time,
                                   s.force_matching_signature,
                                   CASE
                                     WHEN s.force_matching_signature > 0 THEN
                                      TO_CHAR(s.force_matching_signature)
                                     ELSE
                                      s.sql_id
                                   END matching_criteria,
                                   ROW_NUMBER() OVER(PARTITION BY s.sql_id, s.child_number ORDER BY sw.multipasses_executions DESC, sw.onepass_executions DESC, sw.last_memory_used DESC) rnum,
                                   sw.operation_type,
                                   sw.policy,
                                   sw.estimated_optimal_size,
                                   sw.last_memory_used,
                                   sw.last_execution,
                                   MAX(sw.max_tempseg_size) OVER(PARTITION BY s.sql_id, s.child_number) max_tempseg_size,
                                   sw.active_time * sw.total_executions active_time,
                                   SUM(sw.active_time * sw.total_executions) OVER(PARTITION BY s.sql_id, s.child_number) tot_active_time,
                                   COUNT(*) OVER(PARTITION BY s.sql_id, s.child_number) num_sort_operations,
                                   SUM(sw.optimal_executions) OVER(PARTITION BY s.sql_id, s.child_number) tot_optimal_executions,
                                   SUM(sw.onepass_executions) OVER(PARTITION BY s.sql_id, s.child_number) tot_onepass_executions,
                                   SUM(sw.multipasses_executions) OVER(PARTITION BY s.sql_id, s.child_number) tot_multipasses_executions,
                                   NVL(u.username, s.parsing_schema_name) parsing_schema_name
                              FROM v$sql s, v$sql_workarea sw, all_users u
                             WHERE sw.sql_id = s.sql_id
                               AND sw.child_number = s.child_number
                               AND u.user_id(+) = s.parsing_user_id)
                     WHERE rnum = 1)
             WHERE rnum = 1
             ORDER BY tot_multipasses_executions DESC,
                      tot_onepass_executions     DESC,
                      last_memory_used           DESC)
     WHERE ROWNUM <= 200
     /
    
    SELECT *
      FROM (SELECT s.sid,
                   s.machine,
                   s.program,
                   s.module,
                   s.osuser,
                   NVL(DECODE(TYPE,
                              'BACKGROUND',
                              'SYS (' || b.ksbdpnam || ')',
                              s.username),
                       SUBSTR(p.program, INSTR(p.program, '('))) username,
                   NVL(SUM(CASE
                             WHEN sn.name = 'sorts (memory)' THEN
                              ss.VALUE
                             ELSE
                              0
                           END),
                       0) sorts_memory,
                   NVL(SUM(CASE
                             WHEN sn.name = 'sorts (disk)' THEN
                              ss.VALUE
                             ELSE
                              0
                           END),
                       0) sorts_disk,
                   NVL(SUM(CASE
                             WHEN sn.name = 'sorts (rows)' THEN
                              ss.VALUE
                             ELSE
                              0
                           END),
                       0) sorts_rows,
                   NVL(SUM(CASE
                             WHEN sn.name = 'physical reads direct temporary tablespace' THEN
                              ss.VALUE
                             ELSE
                              0
                           END),
                       0) reads_direct_temp,
                   NVL(SUM(CASE
                             WHEN sn.name = 'physical writes direct temporary tablespace' THEN
                              ss.VALUE
                             ELSE
                              0
                           END),
                       0) writes_direct_temp,
                   NVL(SUM(CASE
                             WHEN sn.name = 'workarea executions - optimal' THEN
                              ss.VALUE
                             ELSE
                              0
                           END),
                       0) workarea_exec_optimal,
                   NVL(SUM(CASE
                             WHEN sn.name = 'workarea executions - onepass' THEN
                              ss.VALUE
                             ELSE
                              0
                           END),
                       0) workarea_exec_onepass,
                   NVL(SUM(CASE
                             WHEN sn.name = 'workarea executions - multipass' THEN
                              ss.VALUE
                             ELSE
                              0
                           END),
                       0) workarea_exec_multipass
              FROM v$session  s,
                   v$sesstat  ss,
                   v$statname sn,
                   v$process  p,
                   x$ksbdp    b
             WHERE s.paddr = p.addr
               AND b.inst_id(+) = USERENV('INSTANCE')
               AND p.addr = b.ksbdppro(+)
               AND s.TYPE = 'USER'
               AND s.sid = ss.sid
               AND ss.statistic# = sn.statistic#
               AND sn.name IN ('sorts (memory)',
                               'sorts (disk)',
                               'sorts (rows)',
                               'physical reads direct temporary tablespace',
                               'physical writes direct temporary tablespace',
                               'workarea executions - optimal',
                               'workarea executions - onepass',
                               'workarea executions - multipass')
             GROUP BY s.sid,
                      s.machine,
                      s.program,
                      s.module,
                      s.osuser,
                      NVL(DECODE(TYPE,
                                 'BACKGROUND',
                                 'SYS (' || b.ksbdpnam || ')',
                                 s.username),
                          SUBSTR(p.program, INSTR(p.program, '(')))
             ORDER BY workarea_exec_multipass DESC,
                      workarea_exec_onepass DESC,
                      reads_direct_temp + writes_direct_temp DESC,
                      sorts_rows DESC)
     WHERE ROWNUM <= 200
    /
    
    SELECT rawtohex(workarea_address) workarea_address,
           sql_id,
           sql_text,
           operation_type,
           policy,
           sid,
           active_time,
           work_area_size,
           expected_size,
           actual_mem_used,
           max_mem_used,
           number_passes,
           tempseg_size,
           tablespace,
           complete_ratio,
           elapsed,
           time_remaining,
           opname,
           machine,
           program,
           module,
           osuser,
           username
      FROM (SELECT swa.workarea_address,
                   swa.sql_id,
                   sa.sql_text,
                   swa.operation_type,
                   swa.policy,
                   swa.sid,
                   swa.active_time / 1000 active_time,
                   swa.work_area_size,
                   swa.expected_size,
                   swa.actual_mem_used,
                   swa.max_mem_used,
                   swa.number_passes,
                   swa.tempseg_size,
                   swa.tablespace,
                   (CASE
                     WHEN sl.totalwork <> 0 THEN
                      sl.sofar / sl.totalwork
                     ELSE
                      NULL
                   END) complete_ratio,
                   sl.elapsed_seconds * 1000 elapsed,
                   sl.time_remaining * 1000 time_remaining,
                   sl.opname,
                   s.machine,
                   s.program,
                   s.module,
                   s.osuser,
                   NVL(DECODE(TYPE,
                              'BACKGROUND',
                              'SYS (' || b.ksbdpnam || ')',
                              s.username),
                       SUBSTR(p.program, INSTR(p.program, '('))) username,
                   ROW_NUMBER() OVER(PARTITION BY swa.sql_id ORDER BY sl.last_update_time DESC) rnum
              FROM v$sql_workarea_active swa,
                   v$sqlarea sa,
                   (SELECT * FROM v$session_longops WHERE sofar <> totalwork) sl,
                   v$session s,
                   v$process p,
                   x$ksbdp b
             WHERE sl.sid(+) = swa.sid
               AND sl.sql_id(+) = swa.sql_id
               AND swa.sid <> USERENV('sid')
               AND sa.sql_id = swa.sql_id
               AND s.sid = swa.sid
               AND s.paddr = p.addr
               AND b.inst_id(+) = USERENV('INSTANCE')
               AND p.addr = b.ksbdppro(+)
             ORDER BY swa.number_passes DESC, swa.work_area_size DESC)
     WHERE rnum = 1
    /
  • 相关阅读:
    Asp.Net2.0中的缓存
    webpartzone无法显示最小化和关闭按钮?
    TransactionScope分布式事务和非分布式事务
    JS获取GET参数的两种方法
    js 文件上传下载功能
    android动态设置布局LayoutInflater的使用详解
    Eclipse大括号换行显示
    Java强引用、 软引用、 弱引用、虚引用(转载)
    Android扭曲图像(水面落叶壁纸初步实现)
    win7系统自带的屏幕录制软件
  • 原文地址:https://www.cnblogs.com/macleanoracle/p/2967276.html
Copyright © 2011-2022 走看看