网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.Oracle 数据库向 MS SQL Server .
.ORACLE回滚段管理(上).
.Oracle中使用的若干技术经典总结.
.关于恢复数据库的说明.
.ORACLE在HP-UX下的系列问题处理(.
.请问这是怎么回事??如何解决.
.Oracle压力测试之orabm.
.Oracle数据库结构之物理存储结构.
.oracle使用命令行导入导出方案.
.监控数据库性能的SQL.
.旧数据文件,旧控制文件,新日志.
.linux显卡的配置(2).
.用Oracle导入导出工具实现Oracle.
.Oracle高级复制的创建配置步骤-S.
.Oracle数据库安全策略与实现方法.
.Re: ORA-27101错误.
.如何用智能优化器提高Oracle的性.
.打开Oracle某数据文件损坏后的数.
.如何查看用户表所占空间的大小.
.如何在sqlserver2000中实现oracl.

分析数据库性能的SQL

发表日期:2008-2-9



  --用于查看哪些实例的哪些操作使用了大量的临时段
  
  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
上一篇:ORACLE学习笔记--性能优化一 人气:806
下一篇:定时执行存储过程对库表及索引进行分析 人气:1300
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐