robin 发表于 2018-10-21 08:48:52

查看性能差的sql语句

  查询出性能最差的10条sql
  SELECT * FROM (select PARSING_USER_ID,EXECUTIONS,SORTS,
  COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea
  order BY disk_reads DESC )where ROWNUM 10000000 OR disk_reads > 1000000
  ORDER BY buffer_gets + 100 * disk_reads DESC;
  DISK_READS:表示物理读的数量。
  分析性能差的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
  查询共享池中已经解析过的SQL语句及其相关信息
  --EXECUTIONS 所有子游标的执行这条语句次数
  --DISK_READS 所有子游标运行这条语句导致的读磁盘次数
  --BUFFER_GETS 所有子游标运行这条语句导致的读内存次数
  --Hit_radio 命中率
  --Reads_per_run 每次执行读写磁盘数
  笼统的说EXECUTIONS,BUFFER_GETS,Hit_radio越高表示读内存多,磁盘少是比较理想的状态,因此越高越好
  另外两个越高读磁盘次数越多,因此低点好
  获取执行次数最多的10个SQL
  select sql_text,executions
  from (
  select sql_text,executions,rank() over(order by executions desc) exec_rank
  from v$sql
  )
  where exec_rank 1
  )
  )
  where exec_rank100000
  or disk_reads > 100000
  order by buffer_gets+100*disk_reads desc
  前5个花费最多CPU和时间:
  select sql_text,executions,
  round(elapsed_time/1000000,2) elapsed_seconds,
  round(cpu_time/1000000,2) cpu_secs from
  (select * from v$sql order by elapsed_time desc)
  where rownum100 or m.CPU>100 or m.LOGICAL_READS>100) and m.session_id=s.SID and m.SESSION_SERIAL_NUM=s.SERIAL# order by m.PHYSICAL_READS DESC,m.CPU desc,m.LOGICAL_READS desc;
  查询使用频率最高的5个查询:
  select sql_text,executions from (select sql_text,executions, rank() over (order by executions desc) exec_rank from v$sql) where exec_rank
页: [1]
查看完整版本: 查看性能差的sql语句