首页 > 开发 > 综合 > 正文

分析数据库性能的SQL

2024-07-21 02:38:06
字体:
来源:转载
供稿:网友

  --用于查看哪些实例的哪些操作使用了大量的临时段
  
  SELECT to_number(decode(SID, 65535, NULL, SID)) sid,
  Operation_type OPERATION,trunc(EXPECTED_SIZE/1024) ESIZE,
  trunc(ACTUAL_MEM_USED/1024) MEM, trunc(MAX_MEM_USED/1024) "MAX MEM",
  NUMBER_PASSES PASS, trunc(TEMPSEG_SIZE/1024) TSIZE
  FROM V$SQL_WORKAREA_ACTIVE
  ORDER BY 1,2;
  
  ---查询有热块查询的SQL语句
  
  select hash_value
  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 a.hash_value,a.address,a.piece;
  
  --全表扫描
  
  select opname,target,b.num_rows,b.tablespace_name,count(target) from v$session_longops a,all_all_tables b
  where a.TARGET=b.owner'.'b.table_name
  having count(target)>10 group by  opname,target,b.num_rows,b.tablespace_name
  
  --查看磁盘排序和缓存排序次数
  
  select to_char(sn.snap_time,'yyyy-mm-dd hh24') time_,
  avg(newmen.value - oldmen.value) sorts_memeory,
  avg(newdsk.value - olddsk.value) disk_sort
  from  stats$sysstat oldmen,
  stats$sysstat newmen,
  stats$sysstat newdsk,
  stats$sysstat olddsk,
  stats$snapshot sn
  where  newdsk.snap_id=sn.snap_id
  and   olddsk.snap_id=sn.snap_id-1
  and   newmen.snap_id=sn.snap_id
  and   newdsk.snap_id=sn.snap_id -1
  and   oldmen.name='sorts (memory)'
  and   newmen.name='sorts (memory)'
  and   olddsk.name='sorts (disk)'
  and   newdsk.name='sorts (disk)'
  group by to_char(sn.snap_time,'yyyy-mm-dd hh24')
  
  --执行最慢的前10个SQL???
  
  select * from (
  select
  to_char(snap_time,'dd Mon HH24:mi:ss') mydate,
  executions               exec,
  loads                 loads,
  parse_calls              parse,
  disk_reads               reads,
  buffer_gets              gets,
  rows_PRocessed             rows_proc,
  sorts                 sorts,
  sql_text,
  hash_value
  from
  perfstat.stats$sql_summary sql,
  perfstat.stats$snapshot   sn
  where
  sql.snap_id >
  (select min(snap_id) min_snap
  from stats$snapshot where snap_time > sysdate-$days_back)
  and
  sql.snap_id = sn.snap_id
  order by $sortskey desc) tt where rownum<11;
  
  --SQL缓存池的命中率查询(pinhitratio,gethitratio应该大于90%以上)
  
  select namespace,gethitratio,pinhitratio,reloads,invalidations
  from v$librarycache
  where namespace in ('SQL AREA','TABLE/PROCEDURE','BODY','TRIGGER')
  
  --数据库的常规参数我就不说了,除了V$parameter中的常规参数外,Oracle还有大量的隐含参数,下面的语句就可以查询到数据库的所有隐含参数以及其值与参数的描述。

  
  SELECT NAME
  ,VALUE
  ,decode(isdefault, 'TRUE','Y','N') as "Default"
  ,decode(ISEM,'TRUE','Y','N') as SesMod
  ,decode(ISYM,'IMMEDIATE', 'I',
  'DEFERRED', 'D',
  'FALSE', 'N') as SysMod
  ,decode(IMOD,'MODIFIED','U',
  'SYS_MODIFIED','S','N') as Modified
  ,decode(IADJ,'TRUE','Y','N') as Adjusted
  ,description
  FROM ( --GV$SYSTEM_PARAMETER
  SELECT x.inst_id as instance
  ,x.indx+1
  ,ksppinm as NAME
  ,ksppity
  ,ksppstvl as VALUE
  ,ksppstdf as isdefault
  ,decode(bitand(ksppiflg/256,1),1,'TRUE','FALSE') as ISEM
  ,decode(bitand(ksppiflg/65536,3),
  1,'IMMEDIATE',2,'DEFERRED','FALSE') as ISYM
  ,decode(bitand(ksppstvf,7),1,'MODIFIED','FALSE') as IMOD
  ,decode(bitand(ksppstvf,2),2,'TRUE','FALSE') as IADJ
  ,ksppdesc as DESCRIPTION
  FROM x$ksppi x
  ,x$ksppsv y
  WHERE x.indx = y.indx
  AND substr(ksppinm,1,1) = '_'
  AND x.inst_id = USERENV('Instance')
  )
  ORDER BY NAME
  
  --想知道现在哪个用户正在利用临时段吗?这个语句将告诉你哪个用户正在利用临时段。
  
  SELECT b.tablespace, b.segfile#, b.segblk#, b.blocks, a.sid, a.serial#,
  a.username, a.osuser, a.status,c.sql_text
  FROM v$session a,v$sort_usage b, v$sql c
  WHERE a.saddr = b.session_addr
  AND a.sql_address = c.address(+)
  ORDER BY b.tablespace, b.segfile#, b.segblk#, b.blocks;
  
  --查看磁盘碎片
  
  select tablespace_name,sqrt(max(blocks)/sum(blocks))*
  (100/sqrt(sqrt(count(blocks)))) FSFI
  from dba_free_space
  group by tablespace_name order by 1
  
  1.查看表空间的名称及大小
  
  select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size
  from dba_tablespaces t, dba_data_files d
  where t.tablespace_name = d.tablespace_name
  group by t.tablespace_name;
  
  2.查看表空间物理文件的名称及大小
  
  select tablespace_name, file_id, file_name,
  round(bytes/(1024*1024),0) total_space
  from dba_data_files
  order by tablespace_name;
  
  3.查看回滚段名称及大小
  
  select segment_name, tablespace_name, r.status,
  (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,
  max_extents, v.curext CurExtent
  From dba_rollback_segs r, v$rollstat v
  Where r.segment_id = v.usn(+)
  order by segment_name
  
  15。耗资源的进程(top session)
  
  select s.schemaname schema_name,  decode(sign(48 - command), 1,
  to_char(command), 'Action Code #' to_char(command) ) action,  status
  session_status,  s.osuser os_user_name,  s.sid,     p.spid ,     s.serial# serial_num,
  nvl(s.username, '[Oracle process]') user_name,  s.terminal terminal,
  s.program program,  st.value criteria_value from v$sesstat st,  v$session s , v$process p
  where st.sid = s.sid and  st.statistic# = to_number('38') and  ('ALL' = 'ALL'
  or s.status = 'ALL') and p.addr = s.paddr order by st.value desc, p.spid asc, s.username asc, s.osuser asc
  
  16。
查看锁(lock)情况
  
  select /*+ RULE */ ls.osuser os_user_name,  ls.username user_name,
  decode(ls.type, 'RW', 'Row wait enqueue lock', 'TM', 'DML enqueue lock', 'TX',
  'Transaction enqueue lock', 'UL', 'User supplied lock') lock_type,
  o.object_name object,  decode(ls.lmode, 1, null, 2, 'Row Share', 3,
  'Row Exclusive', 4, 'Share', 5, 'Share Row Exclusive', 6, 'Exclusive', null)
  lock_mode,  o.owner,  ls.sid,  ls.serial# serial_num,  ls.id1,  ls.id2
  from sys.dba_objects o, (  select s.osuser,  s.username,  l.type,
  l.lmode,  s.sid,  s.serial#,  l.id1,  l.id2  from v$session s,
  v$lock l  where s.sid = l.sid ) ls where o.object_id = ls.id1 and  o.owner
  <> 'SYS'  order by o.owner, o.object_name
  
  --查看低效率的SQL语句
  
  SELECT EXECUTIONS , DISK_READS, BUFFER_GETS,
  ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio,
  ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run,
  SQL_TEXT
  FROM  V$SQLAREA
  WHERE EXECUTIONS>0
  AND   BUFFER_GETS > 0
  AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8
  ORDER BY 4 DESC

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表