lYong90

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

-------设定是否可以覆盖没有过期的块
alter database undo  undotbs_name retention noguarantee/guarantee;

select a.END_TIME,
       UNDOBLKS /*消耗undo块总和*/,
       MAXQUERYLEN /*最长查询时间*/,
       MAXQUERYID /*最长查询sql_id*/,
       TXNCOUNT   /*总事务量*/,
       a.EXPSTEALCNT /*偷窃过期区次数*/,
       a.EXPBLKRELCNT /*偷窃成功的块数*/,
       a.EXPBLKREUCNT /*同回滚段中重用过期块数*/,
       a.UNXPSTEALCNT /*偷窃未过期块次数*/,
       a.UNXPBLKRELCNT /*偷窃成功未过期块数*/,
       a.UNXPBLKREUCNT /*重用未过期块数*/
  from v$undostat a;

---------------undo膨胀问题分析
with tab_min_extend as
 (select distinct b.SEGMENT_NAME,
         b.TABLESPACE_NAME,
         min(b.EXTENT_ID) over(partition by b.SEGMENT_NAME, b.TABLESPACE_NAME) min_extend,
         b.STATUS
    from dba_undo_extents b
   where b.STATUS <> 'EXPIRED'),
tab_sge_size as
 (select distinct d.SEGMENT_NAME,
                  d.TABLESPACE_NAME,
                  sum(d.BYTES) over(partition by d.SEGMENT_NAME, d.TABLESPACE_NAME) seg_size
    from dba_undo_extents d),
tab_sge_unused as
 (select distinct a.SEGMENT_NAME,
                  a.TABLESPACE_NAME,
                  sum(a.bytes) over(partition by a.SEGMENT_NAME, a.TABLESPACE_NAME) as sge_unused
    from dba_undo_extents a, tab_min_extend c, tab_sge_size e
   where a.SEGMENT_NAME = c.SEGMENT_NAME
     and a.TABLESPACE_NAME = c.TABLESPACE_NAME
     and a.EXTENT_ID < c.min_extend)
select roll.usn,al.TABLESPACE_NAME, al.SEGMENT_NAME, al.seg_size, un.sge_unused
  from tab_sge_size al, tab_sge_unused un,v$rollname roll
 where al.SEGMENT_NAME = un.SEGMENT_NAME(+)
   and al.TABLESPACE_NAME = un.TABLESPACE_NAME(+)
   and al.SEGMENT_NAME=roll.name
order by roll.usn;

-----undo表空间使用情况 (如果used_rag>60%需要查具体是哪个进程)
set linesize 200
col used_pct format a8
select b.tablespace_name,
       nvl(used_undo,0) "USED_UNDO(M)",
       total_undo "Total_undo(M)",
       trunc(nvl(used_undo,0) / total_undo * 100, 2) || '%' used_PCT
  from (select nvl(sum(bytes / 1024 / 1024), 0) used_undo, tablespace_name
          from dba_undo_extents
         where status = 'ACTIVE'
         group by tablespace_name) a,
       (select tablespace_name, sum(bytes / 1024 / 1024) total_undo
          from dba_data_files
         where tablespace_name in
               (select value
                  from v$spparameter
                 where name = 'undo_tablespace'
                   and (sid = (select instance_name from v$instance) or
                       sid = '*'))
         group by tablespace_name) b
 where a.tablespace_name (+)= b.tablespace_name
/

--注:包含UNEXPIRED类型 (主要是用这个)
select b.tablespace_name,
       nvl(used_undo,0) "USED_UNDO(M)",
       total_undo "Total_undo(M)",
       trunc(nvl(used_undo,0) / total_undo * 100, 2) || '%' used_PCT
  from (select nvl(sum(bytes / 1024 / 1024), 0) used_undo, tablespace_name
          from dba_undo_extents
         where status in ( 'ACTIVE','UNEXPIRED')
         group by tablespace_name) a,
       (select tablespace_name, sum(bytes / 1024 / 1024) total_undo
          from dba_data_files
         where tablespace_name in
               (select value
                  from v$spparameter
                 where name = 'undo_tablespace'
                   and (sid in  (select instance_name from gv$instance) or
                       sid = '*'))
         group by tablespace_name) b
 where a.tablespace_name (+)= b.tablespace_name
/


SELECT tablespace_name, status, SUM(bytes) / 1024 / 1024/1024  size_gb
  FROM dba_undo_extents
 WHERE tablespace_name LIKE 'UNDOTBS%'
 GROUP BY tablespace_name, status
 ORDER BY 1 
 /
 
---------回滚段等待比率大于1%
SELECT decode(r1.hwmsize, NULL, drs.segment_name || ' (Offline)',
              drs.segment_Name) "Rollback Segment Name",
       COUNT(ds.SEGMENT_NAME) "Segment Count",
       r1.HWMSIZE "High Water Mark",
       r1.OptSize "Optimal Size",
       r1.Shrinks "Shrinks",
       r1.AveShrink "Average Shrink",
       r1.AveActive "Avg Active Size",
       r1.Wraps "Wraps",
       r1.Extends "Extends",
       r1.gets "Gets",
       r1.waits "Waits",
       Round((r1.Waits * 100 / r1.Gets), 2) "Wait Ratio (%)",
       drs.tablespace_name "Tablespace",
       drs.initial_extent "Extent Size"
  FROM sys.dba_segments ds, Sys.V_$Rollstat r1, sys.dba_rollback_segs drs
 WHERE r1.usn(+) = drs.segment_id
   AND drs.segment_name = ds.segment_name
   AND ds.segment_type = 'ROLLBACK'
   AND Round((r1.Waits * 100 / r1.Gets), 2) > 1
 GROUP BY r1.hwmsize,
          drs.segment_name,
          r1.OptSize,
          r1.Shrinks,
          r1.AveShrink,
          r1.AveActive,
          r1.Wraps,
          r1.Extends,
          r1.gets,
          r1.waits,
          drs.tablespace_name,
          drs.initial_extent
 ORDER BY 3;




 
-----各个session使用的undo
set linesize 1000 pagesize 500
col rollname for a25
col db_os_term_gram for a50
col sid_serial_spid for a20
col sql_id for a15
col COMMAND_NAME for a15
col SELECT_DATE for a15
col undo_kb for  999999999
col login_time for  a20
col last_txn for  a20
col trans_starttime for  a30

SELECT r.name rollname,
       nvl(s.SCHEMANAME, 'None') || '/' || s.osuser || '/' || s.TERMINAL || '/' ||
       s.PROGRAM db_os_term_gram,
       s.sid||'/'|| s.serial#||'/'||p.spid sid_serial_spid,
       s.sql_id,/*
       (select COMMAND_NAME
          from v$sqlcommand comm
         where s.COMMAND = comm.COMMAND_TYPE) COMMAND_NAME,*/
       t.used_ublk * TO_NUMBER(x.value) / 1024 AS undo_kb,
       TO_CHAR(s.logon_time, 'yy/mm/dd hh24:mi:ss') AS login_time,
       TO_CHAR(SYSDATE - (s.last_call_et) / 86400, 'yy/mm/dd hh24:mi:ss') AS last_txn,
       t.START_TIME trans_starttime
  FROM v$process     p,
       v$rollname    r,
       v$session     s,
       v$transaction t,
       v$parameter   x
 WHERE s.taddr = t.addr
       AND s.paddr = p.addr
       AND r.usn = t.xidusn(+)
       AND x.name = 'db_block_size'
--and s.sid in  (1908,960,1387,1448) 
 ORDER BY undo_kb DESC;

 

posted on 2018-08-15 14:47  lYong90  阅读(363)  评论(0)    收藏  举报