暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在Oracle中,如何查询逻辑读、物理读等SQL语句呢?如何寻找或监控效率低下的SQL语句?

DB宝 2017-05-09
2801


Q
题目如下所示:

在Oracle中,如何查询逻辑读、物理读、执行次数和解析次数最多以及执行时间最长的SQL语句呢?如何寻找或监控效率低下的SQL语句?


     

A
答案如下所示:


效率低下的SQL一般是执行时间较长的SQL语句,可以通过如下几种方式来监控分析:

① 当前系统的SQL可以通过监控V$SQL_MONITORV$SESSION视图来实现,记录执行时间较长的SQL语句。对于历史SQL可以通过分析DBA_HIST_SQLSTAT视图。

② 分析现有的系统中的执行计划,重点检查驱动表与被驱动表顺序、表连接算法、排序是否有索引、索引使用

③ 分析AWRASHADDM

④ 通过OEM中性能监控的捕获5s以上的SQL

⑤ 通过GV$SQLAREA视图来分析。

如下的SQL语句是查询执行时间最长的SQL语句,若要查询其它性能问题,可以将SQL中加粗的字段替换即可。逻辑读取BUFFER_GETS字段,物理读取DISK_READS字段,执行时间取ELAPSED_TIME字段,执行次数取EXECUTIONS字段,解析次数取PARSE_CALLS字段


  1. SELECT INST_ID,

  2.        USERNAME,

  3.        SQL_ID,

  4.        A.BUFFER_GETS BUFFER_GETS,

  5.        DISK_READS,

  6.        LAST_LOAD_TIME,

  7.        LAST_ACTIVE_TIME,

  8.        A.EXECUTIONS,

  9.        PARSE_CALLS,

  10.        VERSION_COUNT,

  11.        LOADS,

  12.        ((ELAPSED_TIME 1000000)) ELAPSED_TIME,

  13.        ROUND(A.BUFFER_GETS DECODE(A.EXECUTIONS, 0, 1, A.EXECUTIONS), 3) BUFFER_GETS_PER_EXEC,

  14.        ROUND(A.DISK_READS DECODE(A.EXECUTIONS, 0, 1, A.EXECUTIONS), 3) DISK_READS_PER_EXEC,

  15.        (A.ELAPSED_TIME 1000000 DECODE(A.EXECUTIONS, 0, 1, A.EXECUTIONS)) ELAPSED_TIME_PER_EXEC,

  16.        CLIENT_INFO,

  17.        A.SQL_TEXT SQL_TEXT

  18.   FROM (SELECT AI.INST_ID,

  19.                AI.BUFFER_GETS,

  20.                AI.DISK_READS,

  21.                AI.EXECUTIONS,

  22.                AI.PARSE_CALLS,

  23.                AI.SQL_TEXT,

  24.                AI.PARSING_USER_ID,

  25.                AI.SQL_ID,

  26.                AI.ELAPSED_TIME,

  27.                AI.LAST_LOAD_TIME,

  28.                AI.LAST_ACTIVE_TIME,

  29.                PARSING_SCHEMA_NAME USERNAME,

  30.                VERSION_COUNT,

  31.                LOADS,

  32.                AI.MODULE || '--' || AI.ACTION CLIENT_INFO,

  33.                RANK() OVER(ORDER BY AI.ELAPSED_TIME DESC) RANK_ORDER

  34.           FROM GV$SQLAREA AI

  35.          WHERE BUFFER_GETS > 1000 ) A

  36.  WHERE RANK_ORDER <= 10

  37.  ORDER BY INST_ID, A.ELAPSED_TIME DESC;


& 说明:

有关SQL监控更多内容可以参考我的BLOGhttp://blog.itpub.net/26736162/viewspace-1262559/






DB笔试面试历史连接

http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w




About Me:小麦苗

 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

 文章内容来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

 版权所有,欢迎分享本文,转载请保留出处


长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。

最后修改时间:2020-01-10 21:12:29
文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论