1. 程式人生 > >Oracle監控之Top sql語句查詢及各種監控語句統計

Oracle監控之Top sql語句查詢及各種監控語句統計

希望能對大家有所幫助!

很多時候大家想檢視oracle資料庫中的sql語句執行情況,但是又不知道如何是好,今天在這裡為大家提供一個sql語句,大家可以通過以下的sql語句查詢Oracle資料庫中Top Sql情況:
查詢結果可按照PCT、總耗費時間、CPU使用時間、平均執行時間、執行次數、關聯行數等排序。
TOP sql語句如下:

select round(100 * a.pct, 2) pct, 
       round(a.elapsed_time/1000000, 2) elapsed_time, 
       round(a.elapsed_time/a.executions/1000) ms_by_exec, 
       round(a.cpu_time/1000000
, 2) cpu_time, a.buffer_gets total_cost, round(a.buffer_gets/a.executions) elem_cost, a.executions exec, a.rows_processed nb_rows, s.sql_text from (select * from (select elapsed_time, ratio_to_report(elapsed_time) over () pct, cpu_time, buffer_gets, executions, rows_processed, address, hash_value from
v$sql order by elapsed_time desc) where rownum < 26) a, v$sqlarea s where a.address = s.address and a.hash_value = s.hash_value and a.executions <> 0 order by pct desc, cpu_time desc

session相關:

select sesion.sid, 
    username, 
    osuser, 
    machine, 
    sesion.module
, status, optimizer_mode, sql_text from v$sqlarea sqlarea, v$session sesion where sesion.sql_hash_value = sqlarea.hash_value(+) and sesion.sql_address = sqlarea.address(+) and sesion.username is not null order by username, sql_text

locks相關:

select 
  username, 
  osuser, 
  machine, 
  s.module, 
  l.sid, 
  decode(l.type, 
     'MR', 'Media Recovery', 
     'RT', 'Redo Thread', 
     'UN', 'User Name', 
     'TX', 'Transaction', 
     'TM', 'DML', 
     'UL', 'PL/SQL User Lock', 
     'DX', 'Distributed Xaction', 
     'CF', 'Control File', 
     'IS', 'Instance State', 
     'FS', 'File Set', 
     'IR', 'Instance Recovery', 
     'ST', 'Disk Space Transaction', 
     'TS', 'Temp Segment', 
     'IV', 'Library Cache Invalidation', 
     'LS', 'Log Start or Switch', 
     'RW', 'Row Wait', 
     'SQ', 'Sequence Number', 
     'TE', 'Extend Table', 
     'TT', 'Temp Table', l.type) type, 
  decode(lmode, 
     0, 'None', 
     1, 'Null', 
     2, 'Row-S (SS)', 
     3, 'Row-X (SX)', 
     4, 'Share', 
     5, 'S/Row-X (SSX)', 
     6, 'Exclusive', lmode) lmode, 
  decode(request, 
     0, 'None', 
     1, 'Null', 
     2, 'Row-S (SS)', 
     3, 'Row-X (SX)', 
     4, 'Share', 
     5, 'S/Row-X (SSX)', 
     6, 'Exclusive', request) request, 
  decode(block, 
     0, 'Not Blocking', 
     1, 'Blocking', 
     2, 'Global', block) block, 
  owner, 
  object_name, 
  a.sql_text 
from v$locked_object lo, all_objects ao, v$lock l, v$session s, v$sqlarea a 
where lo.object_id = ao.object_id 
  and l.sid = lo.session_id 
  and s.sid = l.sid 
  and a.address = s.sql_address(+) 
  and a.hash_value = s.sql_hash_value(+) 
order by username

foreignKeysWithoutIndexes相關:

 select user_cons_columns.table_name || '.' || user_constraints.constraint_name as "Foreign key" 
  from user_cons_columns, user_constraints 
  where user_constraints.constraint_type = 'R' and 
    user_constraints.constraint_name = user_cons_columns.constraint_name and 
user_cons_columns.table_name || '.' || user_cons_columns.column_name not in (select table_name || '.' || column_name from user_ind_columns)

invalid objects相關:

select object_name from user_objects where status = 'INVALID'

disabled Constraints相關:

select table_name || '.' || constraint_name as "Constraint" 
     from user_constraints where status = 'DISABLED'

Library Cache Ratio/Row Cache Ratio/Cache Hit Ratio相關:

select round(100*(1-sum(reloads)/sum(pins)),2) || '% Library Cache Ratio' Ratio from v$librarycache union 
select round(100*(1-sum(getmisses)/sum(gets)),2) || '% Row Cache Ratio' from v$rowcache 
union 
select round(100*(1-(phy.value / (cur.value + con.value))),2) || '% Cache Hit Ratio' 
from v$sysstat cur, v$sysstat con, v$sysstat phy 
where cur.name = 'db block gets' and 
      con.name = 'consistent gets' and 
      phy.name = 'physical reads'

oracle.parameters = select * from v$parameter

rollback Segment統計相關:

Select rn.Name "Rollback Segment", rs.RSSize/1024 "Size (KB)", rs.Gets "Gets", 
       rs.waits "Waits", (rs.Waits/rs.Gets)*100 "% Waits", 
       rs.Shrinks "# Shrinks", rs.Extends "# Extends" 
from   v$RollName rn, v$RollStat rs
where rn.usn = rs.usn

statistics 相關:

select name statistic, value system, 
(select sum(value) from v$sesstat ses where ses.statistic# = sys.statistic#) sessions 
from v$sysstat sys

events 相關:

select event, time_waited system, 
(select sum(time_waited) from v$session_event ses where ses.event = sys.event) sessions 
from v$system_event sys 
where event != 'Null event' and 
  event != 'rdbms ipc message' and 
  event != 'pipe get' and 
  event != 'virtual circuit status' and 
  event != 'lock manager wait for remote message' and 
  event not like '% timer' and 
event not like 'SQL*Net message from %'

datafile IO 相關:

select   df.NAME filename, 
         ts.name tablespace_name, 
         PHYRDS physical_reads, 
         round((PHYRDS / pd.PHYS_READS)*100,2) pct_reads, 
         PHYWRTS physical_writes, 
         round(PHYWRTS * 100 / pd.PHYS_WRTS,2) pct_writes, 
         fs.PHYBLKRD + fs.PHYBLKWRT total_block_io 
from    (select sum(PHYRDS) phys_reads, 
                sum(PHYWRTS) phys_wrts 
         from v$filestat) pd, 
         v$datafile df, 
         v$filestat fs, 
         v$tablespace ts 
where    df.FILE# = fs.FILE# and df.ts# = ts.ts# 
order by fs.PHYBLKRD + fs.PHYBLKWRT desc

tablespace相關:

select   TABLESPACE_NAME, 
         INITIAL_EXTENT, 
         NEXT_EXTENT, 
         MIN_EXTENTS, 
         MAX_EXTENTS, 
         PCT_INCREASE, 
         MIN_EXTLEN, 
         STATUS, 
         CONTENTS, 
         LOGGING, 
         EXTENT_MANAGEMENT, 
         ALLOCATION_TYPE 
from     user_tablespaces 
order by TABLESPACE_NAME

tablespace Freespace相關:

select   ddf.TABLESPACE_NAME, 
         ddf.BYTES tablespace_size, 
         ddf.BYTES-nvl(DFS.BYTES,0) used, 
         round(((ddf.BYTES-nvl(dfs.BYTES,0))/ddf.BYTES)*100,2) pct_used, 
         nvl(dfs.BYTES,0) free, 
         round((1-((ddf.BYTES-nvl(dfs.BYTES,0))/ddf.BYTES))*100,2) pct_free 
from    (select t.name TABLESPACE_NAME, 
                sum(BYTES) bytes 
         from   v$datafile d, v$tablespace t 
         where t.ts# = d.ts# 
         group  by t.name) ddf, 
        (select TABLESPACE_NAME, 
                sum(BYTES) bytes 
         from   user_free_space 
         group  by TABLESPACE_NAME) dfs 
where    ddf.TABLESPACE_NAME=dfs.TABLESPACE_NAME(+) 
order by ((ddf.BYTES-nvl(dfs.BYTES,0))/ddf.BYTES) desc