个人整理巡检脚本,求大家拍砖~  

  ------------------------------SGA---------------------------------------------
--SGA 各部分大小
show sga
select * from v$sga;
SELECT * FROM V$SGAINFO;
--SGA设置大小
show parameter sga_target

--SGA各个池大小
COL name FORMAT a32;
SELECT pool, name, bytes/1024/1024 M
  FROM v$sgastat
WHERE pool IS NULL
    OR pool != 'shared pool'
    OR (pool = 'shared pool' AND
       (name IN
       ('dictionary cache', 'enqueue', 'library
       cache', 'parameters', 'processes', 'sessions', 'free memory')))
ORDER BY pool DESC NULLS FIRST, name;
  
  
------------------------BUFFER CACHE-----------------------------------------------
--查看buffer cache 命中率
select 1 - (sum(decode(name, 'physical reads', value, 0)) /
        (sum(decode(name, 'db block gets', value, 0)) +
        (sum(decode(name, 'consistent gets', value, 0))))) "Buffer Hit Ratio"
   from v$sysstat;

  select name,
         physical_reads,
         (consistent_gets + db_block_gets) logic_reads,
         1 - (physical_reads) / (consistent_gets + db_block_gets) hit_radio
    from v$buffer_pool_statistics;

     --查看buffer cache建议  
     select size_for_estimate,
            estd_physical_read_factor,
            to_char(estd_physical_reads, 99999999999999999999999) as"estd_physical_reads"
       from v$db_cache_advice
     where name = 'DEFAULT';
  
     --查看buffer cache建议   --适用于指定SGA的目的
     COL pool FORMAT a10;
     SELECT (SELECT ROUND(value / 1024 / 1024, 0)
               FROM v$parameter
              WHERE name = 'db_cache_size') "Current Cache(Mb)",
            name "Pool",
            size_for_estimate "Projected Cache(Mb)",
            ROUND(100 - estd_physical_read_factor, 0) "Cache Hit Ratio%"
       FROM v$db_cache_advice
     WHERE block_size = (SELECT value FROM v$parameter WHERE name = 'db_block_size')
     ORDER BY 3;

     --查看cache
     show parameter cache

  --各种读取的统计
  ---Database read buffer cache hit ratio =
  ---1 – (physical reads / (db block gets + consistent gets))
  SELECT to_char(value,'9999999999999'), name FROM V$SYSSTAT WHERE name IN
  ('physical reads', 'db block gets', 'consistent gets');

  SELECT 'Database Buffer Cache Hit Ratio ' "Ratio"
          , ROUND((1-
          ((SELECT SUM(value) FROM V$SYSSTAT WHERE name = 'physical reads')
          / ((SELECT SUM(value) FROM V$SYSSTAT WHERE name = 'db block gets')
          + (SELECT SUM(value) FROM V$SYSSTAT WHERE name = 'consistent gets')
          ))) * 100)||'%' "Percentage"
          FROM DUAL;
      

------------------------SHARED_POOL-----------------------------------------------

show parameter shared

     ---检查整体命中率(library cache)
select sum(pinhits) get ,
       sum(pins)-sum(pinhits) miss,
       sum(pinhits) / sum(pins)
  from v$librarycache;

-- 查看library cache 命中率(分类)

   select t.NAMESPACE,t.GETHITRATIO*100
    from v$librarycache t;



     select sum(pins) "hits",
            sum(reloads) "misses",
            sum(pins) / (sum(pins) + sum(reloads)) "Hits Ratio"
       from v$librarycache;e
   
     ---检查shered pool  free  space
SELECT *
  FROM V$SGASTAT
WHERE NAME = 'free memory'
   AND POOL = 'shared pool';

     ---检查row cache(数据字典缓冲区)命中率
     ---当执行一个dml或ddl都会造成对数据字典的递归修改
     column updates format 999,999,999
     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 BY parameter;

  SELECT (SUM(GETS - GETMISSES - FIXED)) / SUM(GETS) "ROW CACHE"
    FROM V$ROWCACHE;

     ---查看Shared pool latch(多池技术)
  
     /*col parameter for a20
     col session for a20*/
       select a.ksppinm "Parameter",
             b.ksppstvl "Session Value",
             c.ksppstvl "Instance Value"
             from sys.x$ksppi a, sys.x$ksppcv b, sys.x$ksppsv c
             where a.indx = b.indx and a.indx = c.indx
             and a.ksppinm = '_kghdsidx_count';
         
  ---查看shared pool建议
   column c1     heading 'Pool |Size(M)'
   column c2     heading 'Size|Factor'
   column c3     heading 'Est|LC(M)  '
   column c4     heading 'Est LC|Mem. Obj.'
   column c5     heading 'Est|Time|Saved|(sec)'
   column c6     heading 'Est|Parse|Saved|Factor'
   column c7     heading 'Est|Object Hits'   format 999,999,999
   SELECT shared_pool_size_for_estimate c1,
          shared_pool_size_factor c2,
          estd_lc_size c3,
          estd_lc_memory_objects c4,
          estd_lc_time_saved c5,
          estd_lc_time_saved_factor c6,
          to_char(estd_lc_memory_object_hits, 99999999999) c7
     FROM V$SHARED_POOL_ADVICE;     

  --查看shared pool中 各种类型的chunk的大小数量   
  SELECT KSMCHCLS CLASS,
         COUNT(KSMCHCLS) NUM,
         SUM(KSMCHSIZ) SIZ,
         To_char(((SUM(KSMCHSIZ) / COUNT(KSMCHCLS) / 1024)), '999,999.00') || 'k' "AVG SIzE"
    FROM X$KSMSP
   GROUP BY KSMCHCLS;

  --查看是否有库缓冲有关的等待事件
     select sid, seq#, event, p1, p1raw, p2, p2raw, p3, p3raw, state
       from v$session_wait
     where event like 'library%';   
      
--row cache命中率
SELECT 'Dictionary Cache Hit Ratio ' "Ratio",
       ROUND((1 - (SUM(GETMISSES) / SUM(GETS))) * 100, 2) || '%' "Percentage"
  FROM V$ROWCACHE;

  ---library cache中详细比率信息
     SELECT 'Library Lock Requests' "Ratio",
            ROUND(AVG(gethitratio) * 100, 2) || '%' "Percentage"
       FROM V$LIBRARYCACHE
     UNION all
     SELECT 'Library Pin Requests' "Ratio",
            ROUND(AVG(pinhitratio) * 100, 2) || '%' "Percentage"
       FROM V$LIBRARYCACHE
     UNION all
     SELECT 'Library I/O Reloads' "Ratio",
            ROUND((SUM(reloads) / SUM(pins)) * 100, 2) || '%' "Percentage"
       FROM V$LIBRARYCACHE ;
   
  
  --查看library cache 内存分配情况(对哪类对象)
     SELECT lc_namespace               "Library",
       LC_INUSE_MEMORY_OBJECTS    "Objects",
       LC_INUSE_MEMORY_SIZE       "Objects Mb",
       LC_FREEABLE_MEMORY_OBJECTS "Freeable Objects",
       LC_FREEABLE_MEMORY_SIZE    "Freeable Mb"
  FROM v$library_cache_memory;   

     ---查看使用shard_pool保留池情况
     SELECT request_misses, request_failures, free_space
     FROM v$shared_pool_reserved;
  
  
  
     ---查看cache中所有pool,命中情况
     COL pool FORMAT a10;
     SELECT a.name "Pool", a.physical_reads, a.db_block_gets
     , a.consistent_gets
     ,(SELECT ROUND((1-(physical_reads / (db_block_gets + consistent_gets)))*100)
     FROM v$buffer_pool_statistics
     WHERE db_block_gets+consistent_gets != 0
     AND name = a.name) "Ratio"
     FROM v$buffer_pool_statistics a;
  
  
     相关命令
     --- alter table xx cache
     ---ALTER TABLE(INDEX) xx STORAGE(BUFFER_POOL KEEP);
     ---取消cache或keep(keep pool)
     ---ALTER TABLE XX NOCACHE;
     ---SELECT 'ALTER INDEX '||index_name||' STORAGE(BUFFER_POOL DEFAULT);'
     ---FROM USER_INDEXES WHERE BUFFER_POOL!='DEFAULT';



  
------------------------PGA-----------------------------------------------
  
     ---查看pga
     show parameters area_size
     --- 查看pga
     SELECT * FROM v$pgastat;
  
     --查看pga建议
     SELECT (SELECT ROUND(value/1024/1024,0) FROM v$parameter
     WHERE name = 'pga_aggregate_target') "Current Mb"
     , ROUND(pga_target_for_estimate/1024/1024,0) "Projected Mb"
     , ROUND(estd_pga_cache_hit_percentage) "%"
     FROM v$pga_target_advice
     ORDER BY 2;


  ------------------------其他指标类---------------------------------------

  ---查看数据库中行chain
  SELECT 'Chained Rows ' "Ratio",
                         ROUND((SELECT SUM(value) FROM V$SYSSTAT  WHERE name = 'table fetch continued row')/
                               (SELECT SUM(value) FROM V$SYSSTAT  WHERE name IN ('table scan rows gotten', 'table fetch byrowid')
                               )* 100, 3)||'%' "Percentage"
                         FROM DUAL;
                     
     ---在内存中排序比率(最优排序)
     SELECT 'Sorts in Memory ' "Ratio",
            ROUND((SELECT SUM(value) FROM V$SYSSTAT WHERE name = 'sorts (memory)') /
                  (SELECT SUM(value)
                     FROM V$SYSSTAT
                    WHERE name IN ('sorts (memory)', 'sorts (disk)')) * 100,
                  5) || '%' "Percentage"
       FROM DUAL;
   
   
     ---查询解析比率
     SELECT 'Soft Parses ' "Ratio",
            ROUND(((SELECT SUM(value)
                      FROM V$SYSSTAT
                     WHERE name = 'parse count (total)') -
                  (SELECT SUM(value)
                      FROM V$SYSSTAT
                     WHERE name = 'parse count (hard)')) /
                  (SELECT SUM(value) FROM V$SYSSTAT WHERE name = 'execute count') * 100,
                  2) || '%' "Percentage"
       FROM DUAL
     UNION
     SELECT 'Hard Parses ' "Ratio",
            ROUND((SELECT SUM(value)
                     FROM V$SYSSTAT
                    WHERE name = 'parse count (hard)') /
                  (SELECT SUM(value) FROM V$SYSSTAT WHERE name = 'execute count') * 100,
                  2) || '%' "Percentage"
       FROM DUAL
     UNION
     SELECT 'Parse Failures ' "Ratio",
                 ROUND((SELECT SUM(value)
                     FROM V$SYSSTAT
                    WHERE name = 'parse count (failures)') /
                  (SELECT SUM(value)
                     FROM V$SYSSTAT
                    WHERE name = 'parse count (total)') * 100,
                  5) || '%' "Percentage"
       FROM DUAL;
   
   
     --查询latch free 等待事件相关信息
     COL event FORMAT a20;
     COL waits FORMAT 9999990;
     COL timeouts FORMAT 99999990;
     COL average FORMAT 99999990;
     SELECT event          "Event",
            time_waited    "Total Time",
            total_waits    "Waits",
            average_wait   "Average",
            total_timeouts "Timeouts"
       FROM V$SYSTEM_EVENT
     WHERE event = 'latch free'
     ORDER BY EVENT;   
     ---查看数据库中查询时主要访问方式,获取大表小表访问比率(2个表的访问算法不同)
   ---table scans (long tables)过多的话,一般db file scattered read比较显著
     ---_small_table_threshold来定义大表和小表的界限。缺省为2%的Buffer数量 ,>这个参数为大表
     ---default 大表的全表扫描会被置于LRU的末端(最近最少使用,冷端),以期尽快老化(让其尽快换出buffer cache),减少Buffer的占用
     --表访问统计
     SELECT value, name
     FROM V$SYSSTAT
    WHERE name IN ('table fetch by rowid',
                 'table scans (short tables)',
                 'table scans (long tables)');

  -----查看大表小表扫描对应的值
     SELECT value, name FROM V$SYSSTAT WHERE name IN
     ('table fetch by rowid', 'table scans (short tables)'
     , 'table scans (long tables)');
  
  
     SELECT 'Short to Long Full Table Scans' "Ratio"
     , ROUND(
     (SELECT SUM(value) FROM V$SYSSTAT
     WHERE name = 'table scans (short tables)')
     / (SELECT SUM(value) FROM V$SYSSTAT WHERE name IN
     ('table scans (short tables)', 'table scans (long tables)'))
     * 100, 2)||'%' "Percentage"
     FROM DUAL
     UNION
     SELECT 'Short Table Scans ' "Ratio"
     , ROUND(
     (SELECT SUM(value) FROM V$SYSSTAT
     WHERE name = 'table scans (short tables)')
     / (SELECT SUM(value) FROM V$SYSSTAT WHERE name IN
     ('table scans (short tables)', 'table scans (long tables)', 'table fetch by rowid'))
     * 100, 2)||'%' "Percentage"
     FROM DUAL
     UNION
     SELECT 'Long Table Scans ' "Ratio"
     , ROUND(
     (SELECT SUM(value) FROM V$SYSSTAT
     WHERE name = 'table scans (long tables)')
     / (SELECT SUM(value) FROM V$SYSSTAT WHERE name
     IN ('table scans (short tables)', 'table scans (long tables)', 'table fetch by rowid'))
     * 100, 2)||'%' "Percentage"
     FROM DUAL
     UNION
     SELECT 'Table by Index ' "Ratio"
     , ROUND(
     (SELECT SUM(value) FROM V$SYSSTAT WHERE name = 'table fetch by rowid')
     / (SELECT SUM(value) FROM V$SYSSTAT WHERE name
     IN ('table scans (short tables)', 'table scans (long tables)'
     , 'table fetch by rowid'))
     * 100, 2)||'%' "Percentage"
     FROM DUAL
     UNION
     SELECT 'Efficient Table Access ' "Ratio"
     , ROUND(
     (SELECT SUM(value) FROM V$SYSSTAT WHERE name
     IN ('table scans (short tables)','table fetch by rowid'))
     / (SELECT SUM(value) FROM V$SYSSTAT WHERE name
     IN ('table scans (short tables)', 'table scans (long tables)'
     , 'table fetch by rowid'))
     * 100, 2)||'%' "Percentage"
     FROM DUAL;
  
标签: 暂无标签
oraask2

写了 49 篇文章,拥有财富 561,被 72 人关注

转播转播 分享分享 分享淘帖
回复

使用道具

P5 | 发表于 2012-5-10 09:17:56
redo 相关

  --查询归档模式
  select name ,open_mode,log_mode from v$database;
  archive log list

  ---检查日志切换频率
  select sequence#,
         to_char(first_time, 'yyyymmdd_hh24:mi:ss') firsttime,
         round((first_time - lag(first_time) over(order by first_time)) * 24 * 60,2) minutes
    from v$log_history
  where 1=1
  -- and first_time > sysdate - 1
  order by first_time, minutes;


  ---检查lgwr i/o性能 (time_waited/total_waits:表示平均lgwr写入完成时间 若>1(百分之一秒)表示写入过慢)
  select total_waits,
         time_waited,
         average_wait,
         time_waited / total_waits as avg_time
    from v$system_event
  where event = 'log file parallel write';

  ---检查与redo相关性能指标
    select name,value from v$sysstat where name like '%redo%';
  
  ---查询redo block size
     select max(lebsz) from x$kccle;
   
  ---查看redo allocation latch

  col name for a30
  select name, gets, misses, misses / gets
    from v$latch
  where name = 'redo allocation';

  col name for a30
  select name, gets, misses, misses / gets
    from v$latch_children
  where name = 'redo allocation';


  ---查看与redo相关等待事件
  col event format a40
  select event,total_waits,time_waited ,total_timeouts,average_wait
     from v$system_event
    where upper(event) like'%REDO%';



  ---查看user commit次数
        select to_number(value,99999999999) from v$sysstat where name='user commits';


  ---查看系统运行时间
  select (sysdate - startup_time)*24*60*60 as seconds from v$instance


  ---计算出每秒用户提交次数
  select  user_commit次数/系统运行时间  from dual;



  ---计算出每个事务平均处理多少个redo block
  select a.redoblocks / b.trancount
    from (select value redoblocks
            from v$sysstat
           where name = 'redo blocks written') a,
         (select value trancount from v$sysstat where name = 'user commits') b
回复

使用道具

P5 | 发表于 2012-5-10 09:18:20
总体配置
---检查database基本信息
select * from v$version;
select name ,open_mode,log_mode from v$database;
--检查是否为rac 实例数量
select instance_number,instance_name ,status from gv$instance;
show parameter cpu_count
--默认数据块大小
show parameter block_size

--各种文件数量
select count(*) from v$controlfile                     
select count(*) from v$tempfile;                        
select count(*) from v$datafile;  

--资源限制
SELECT * FROM V$RESOURCE_LIMIt ;


--数据库安装信息
SELECT *
FROM V$OPTION
--数据库参数
show parameter
回复

使用道具

P5 | 发表于 2012-5-10 09:18:52
数据文件与空间类


--各种文件数量
select count(*) from v$tempfile;                       
select count(*) from v$datafile;

--表空间大小
select tablespace_name , sum(bytes)/1024/1024 M from dba_temp_files group by tablespace_name
union all
select tablespace_name , sum(bytes)/1024/1024 M from dba_data_files group by tablespace_name;

--数据文件状态
select  t.online_status,count(*)
from dba_data_files  t
group by  t.online_status ;

--表空间基本信息
SELECT t.status,
       t.tablespace_name,
       t.extent_management,
       t.segment_space_management,
       t.contents
FROM DBA_TABLESPACES  t
order by t.status


--临时段使用情况
COL username FORMAT a10;
COL segtype FORMAT a10;
SELECT username,
       segtype,
       extents "Extents Allocated",
       blocks "Blocks Allocated"
  FROM v$tempseg_usage;


--查看临时表空间总体使用情况
SELECT TMP_TBS.TABLESPACE_NAME,
       SUM(TMP_TBS.TOTAL_MB) TOTAL_MB,
       SUM(USED_TOT.USED_MB) USED_MB,
       SUM(USED_TOT.USED_MB) / SUM(TMP_TBS.TOTAL_MB) * 100 USED_PERSENT
  FROM (SELECT TABLESPACE_NAME, SUM(BYTES) / 1024 / 1024 TOTAL_MB
          FROM DBA_TEMP_FILES
         GROUP BY TABLESPACE_NAME) TMP_TBS,
       (SELECT TMP_USED.TABLESPACE,
               SUM(TMP_USED.BLOCKS * PARA.DB_BLOCK_SIZE) / 1024 / 1024 USED_MB
          FROM V$SORT_USAGE TMP_USED,
               (SELECT VALUE DB_BLOCK_SIZE
                  FROM V$PARAMETER
                 WHERE NAME = 'db_block_size') PARA
         GROUP BY TMP_USED.TABLESPACE) USED_TOT
where TMP_TBS.TABLESPACE_NAME = USED_TOT.TABLESPACE(+)
GROUP BY TMP_TBS.TABLESPACE_NAME;
        

--查看临时表空间中排序段和数据段的使用情况
SELECT TMP_TBS.TABLESPACE_NAME, USED_TOT.SEGTYPE TEMP_SEG_TYPE,
       SUM(TMP_TBS.TOTAL_MB) TOTAL_MB,
       SUM(USED_TOT.USED_MB) USED_MB,
       SUM(USED_TOT.USED_MB) / SUM(TMP_TBS.TOTAL_MB) * 100 USED_PERSENT
  FROM (SELECT TABLESPACE_NAME, SUM(BYTES) / 1024 / 1024 TOTAL_MB
          FROM DBA_TEMP_FILES
         GROUP BY TABLESPACE_NAME) TMP_TBS,
       (SELECT TMP_USED.TABLESPACE, TMP_USED.SEGTYPE,
               SUM(TMP_USED.BLOCKS * PARA.DB_BLOCK_SIZE) / 1024 / 1024 USED_MB
          FROM V$SORT_USAGE TMP_USED,
               (SELECT VALUE DB_BLOCK_SIZE
                  FROM V$PARAMETER
                 WHERE NAME = 'db_block_size') PARA
         GROUP BY TMP_USED.TABLESPACE, TMP_USED.SEGTYPE) USED_TOT
where TMP_TBS.TABLESPACE_NAME = USED_TOT.TABLESPACE(+)
GROUP BY TMP_TBS.TABLESPACE_NAME, USED_TOT.SEGTYPE;



--表空间
set linesize 200;
col TABLESPACE_NAME  for a30;
select a.TABLESPACE_NAME tbs_name,
       round(a.BYTES/1024/1024) Total_MB,
       round((a.BYTES-nvl(b.BYTES, 0)) /1024/1024) Used_MB,
       round((1-((a.BYTES-nvl(b.BYTES,0))/a.BYTES))*100,2) Pct_Free,
       nvl(round(b.BYTES/1024/1024), 0) Free_MB ,
       auto
from   (select   TABLESPACE_NAME,
                 sum(BYTES) BYTES,
                 max(AUTOEXTENSIBLE) AUTO
        from     sys.dba_data_files
        group by TABLESPACE_NAME) a,
       (select   TABLESPACE_NAME,
                 sum(BYTES) BYTES
        from     sys.dba_free_space
        group by TABLESPACE_NAME) b
where  a.TABLESPACE_NAME = b.TABLESPACE_NAME (+)
order  by ((a.BYTES-b.BYTES)/a.BYTES) desc
/


---查看数据文件物理IO信息
SELECT fs.phyrds   "Reads",
       fs.phywrts  "Writes",
       fs.avgiotim "Average I/O Time",
       df.name     "Datafile"
  FROM v$datafile df, v$filestat fs
WHERE df.file# = fs.file#
/



--查看所有数据文件i/o情况
/*COL ts FORMAT a10 HEADING "Tablespace";
COL reads FORMAT 999990999;
COL writes FORMAT 999999990;
COL br FORMAT 999999990 HEADING "BlksRead";
COL bw FORMAT 9999999990 HEADING "BlksWrite";
COL rtime FORMAT 9999999990;
COL wtime FORMAT 9999999990;
set linesize 3000;
set pagesize 9999;*/
SELECT ts.name      AS ts,
       fs.phyrds    "Reads",
       fs.phywrts   "Writes",
       fs.phyblkrd  AS br,
       fs.phyblkwrt AS bw,
       fs.readtim/100   "RTime*s",
       fs.writetim/100  "WTime*s"
  FROM v$tablespace ts, v$datafile df, v$filestat fs
WHERE ts.ts# = df.ts#
   AND df.file# = fs.file#
UNION
SELECT ts.name      AS ts,
       ts.phyrds    "Reads",
       ts.phywrts   "Writes",
       ts.phyblkrd  AS br,
       ts.phyblkwrt AS bw,
       ts.readtim /100  "RTime*s",
       ts.writetim/100  "WTime*s"
  FROM v$tablespace ts, v$tempfile tf, v$tempstat ts
WHERE ts.ts# = tf.ts#
   AND tf.file# = ts.file#
ORDER BY 1;

--定位哪些object在buffer cache中存在,占用的buffer cache的量是多少以及占用的是什么类型的buffer cache。
select decode(pd.bp_id,1,'KEEP',2,'RECYCLE',3,'DEFAULT',
         4,'2K SUBCACHE',5,'4K SUBCACHE',6,'8K SUBCACHE',
         7,'16K SUBCACHE',8,'32KSUBCACHE','UNKNOWN') subcache,
         bh.object_name,bh.blocks
from x$kcbwds ds,x$kcbwbpd pd,(select set_ds,
         o.name object_name,count(*) BLOCKS
         from obj$ o, x$bh x where o.dataobj# = x.obj
         and x.state !=0 and o.owner# !=0
         group by set_ds,o.name) bh
where ds.set_id >= pd.bp_lo_sid
and ds.set_id <= pd.bp_hi_sid
and pd.bp_size != 0
and ds.addr=bh.set_ds
order by  decode(pd.bp_id,1,'KEEP',2,'RECYCLE',3,'DEFAULT',
         4,'2K SUBCACHE',5,'4K SUBCACHE',6,'8K SUBCACHE',
         7,'16K SUBCACHE',8,'32KSUBCACHE','UNKNOWN'),bh.blocks;
      



--针对不同用户的占用buffer的合计

select decode(pd.bp_id,1,'KEEP',2,'RECYCLE',3,'DEFAULT',
         4,'2K SUBCACHE',5,'4K SUBCACHE',6,'8K SUBCACHE',
         7,'16K SUBCACHE',8,'32KSUBCACHE','UNKNOWN') subcache,
         own,sum(bh.blocks)*8192/1024/1024  used_M
from x$kcbwds ds,x$kcbwbpd pd,(select set_ds,
         o.name object_name,count(*) BLOCKS,u.name own
         from obj$ o, x$bh x,user$ u where o.dataobj# = x.obj
         and x.state !=0 and o.owner# !=0 and o.owner#=u.user#
         group by set_ds,o.name,u.name) bh
where ds.set_id >= pd.bp_lo_sid
and ds.set_id <= pd.bp_hi_sid
And pd.bp_size != 0
and ds.addr=bh.set_ds
group by decode(pd.bp_id,1,'KEEP',2,'RECYCLE',3,'DEFAULT',
         4,'2K SUBCACHE',5,'4K SUBCACHE',6,'8K SUBCACHE',
         7,'16K SUBCACHE',8,'32KSUBCACHE','UNKNOWN'),
         own
order  by own;


--buffer cache 对象所有者,名称, 类型,总大小,cache大小
column c1 heading "Object|Name" format a30 truncate
column c2 heading "Object|Type" format a12 truncate
column c3 heading "Number of|Blocks" format 999,999,999,999
column c4 heading "Percentage|of object|data blocks|in Buffer" format 999
break on report
compute sum of c3 on report
select owner,
       object_name,
       object_type,
       num_blocks,
       sum(blocks),
       trunc((num_blocks / decode(sum(blocks), 0, .001, sum(blocks))), 4) * 100 || '%' -- buffer中的数据块比例
  from (select o.owner owner_name,
               o.object_name object_name,
               o.object_type object_type,
               count(1) num_blocks
          from dba_objects o, v$bh bh
         where o.object_id = bh.objd
           and o.owner not in ('SYS', 'SYSTEM')
         group by o.object_name, o.object_type, o.owner
         order by count(1) desc) t1,
       dba_segments s
where s.segment_name = t1.object_name
   and s.owner = t1.owner_name
   and num_blocks > 10
group by object_name, object_type, num_blocks, owner
order by num_blocks desc;

--10个热点对象
col objct_name for a30
select * from
(select
  ob.owner, ob.object_name, sum(b.tch) Touchs
from x$bh b , dba_objects ob
where b.obj = ob.data_object_id
  and b.ts# > 0
group by ob.owner, ob.object_name
order by sum(tch) desc)
where rownum <=10
/

--逻辑读
col objct_name for a30
select *
  from (select owner, object_name, value
          from v$segment_statistics
         where statistic_name = 'logical reads'
         order by value desc)
where rownum <= 10
/

--物理读最多十个对象
col objct_name for a30
select *
  from (select owner, object_name, value
          from v$segment_statistics
         where statistic_name = 'physical reads'
         order by value desc)
where rownum <= 10
/


---查看热点数据文件(从单块读取时间判断)
COL FILE_NAME FOR A30
COL TABLESPACE_NAME FOR A20
SELECT T.FILE_NAME,
       T.TABLESPACE_NAME,
       ROUND(S.SINGLEBLKRDTIM / S.SINGLEBLKRDS, 2) AS CS,
       S.READTIM/100 READTIME_S,
       S.WRITETIM/100 WIRTETIME_S
  FROM V$FILESTAT S, DBA_DATA_FILES T
WHERE S.FILE# = T.FILE_ID
   AND ROWNUM <= 10
ORDER BY CS DESC
/
回复

使用道具

P5 | 发表于 2012-5-10 09:19:22
undo 与回滚段

     ---检查undo
     show parameter undo_
   
     ---检查undo rollback segment 使用情况
     select name, rssize, extents, latch, xacts, writes, gets, waits
       from v$rollstat a, v$rollname b
     where a.usn = b.usn
     order by waits desc;
   
     ---每个事务产生的redo 块大小
     select a.redoblocks / b.trancount
  from (select value redoblocks
          from v$sysstat
         where name = 'redo blocks written') a,
       (select value trancount from v$sysstat where name = 'user commits') b;
      
  ---计算每秒钟产生的undoblk数量
     select sum(undoblks) / sum((end_time - begin_time) * 24 * 60 * 60)
       from v$undostat;
      
  ---查询undo具体信息
     COL undob FORMAT 99990;
     COL trans FORMAT 99990;
     COL snapshot2old FORMAT 9999999990;
     SELECT t.BEGIN_TIME   BEGIN_TIME,
            t.END_TIME     END_TIME,
            undoblks       "UndoB",
            txncount       "Trans",
            maxquerylen    "LongestQuery",
            maxconcurrency "MaxConcurrency",
            ssolderrcnt    "Snapshot2Old",
            nospaceerrcnt  "FreeSpaceWait"
       FROM v$undostat t;
      
     --查询rollback 段详细信息(收缩次数,扩展次数,平均活动事务等)
     --COL RBS FORMAT a4;
     SELECT n.name      "RBS",
            s.extends   "Extends",
            s.shrinks   "Shrinks",
            s.wraps     "Wraps",
            s.aveshrink "AveShrink",
            s.aveactive "AveActive"
       FROM v$rollname n
       JOIN v$rollstat s
     USING (usn)
     WHERE n.name != 'SYSTEM';      
   
     ---查询当前rollback segment使用情况
     COL RBS FORMAT a4;
     SELECT n.name "RBS",
            s.status,
            s.waits,
            s.gets,
            s.writes,
            s.xacts "Active Trans"
       FROM v$rollname n
       JOIN v$rollstat s
     USING (usn)
     WHERE n.name != 'SYSTEM';
         
     ---查询使用rollback segment时等待比率
     SELECT ROUND(SUM(waits/gets)*100,2)||'%' "Contention" FROM
     v$rollstat;
回复

使用道具

P4 | 发表于 2012-5-14 22:48:46
参考学习一下
回复

使用道具

游客 | 发表于 2012-5-21 23:21:37
厉害!参考学习一下!
回复

使用道具

P5 | 发表于 2013-10-3 00:56:49
厉害!参考学习一下!
回复

使用道具

P4 | 发表于 2013-10-3 21:06:41
受教了、、、
回复

使用道具

P4 | 发表于 2013-10-3 22:22:17
谢谢楼主分享。
回复

使用道具

1234下一页
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈