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

在Oracle中,如何查找最近1分钟内,最消耗CPU的SQL语句及会话信息?

DB宝 2017-05-10
1973

Q
题目如下所示:

在Oracle中,如何查找最近1分钟内,最消耗CPUSQL语句及会话信息?


     

A
答案如下所示:



可以根据V$ACTIVE_SESSION_HISTORY视图来获取,如下所示:

① 查找最近一分钟内,最消耗CPUSQL语句:


  1. SELECT ASH.INST_ID,

  2.         ASH.SQL_ID,

  3.         (SELECT VS.SQL_TEXT

  4.            FROM GV$SQLAREA VS

  5.           WHERE VS.SQL_ID = ASH.SQL_ID

  6.             AND ASH.INST_ID = VS.INST_ID) SQL_TEXT,

  7.         ASH.SQL_CHILD_NUMBER,

  8.         ASH.SQL_OPNAME,

  9.         ASH.SESSION_INFO,

  10.         COUNTS,

  11.         PCTLOAD * 100 || '%' PCTLOAD

  12.    FROM (SELECT ASH.INST_ID,

  13.                 ASH.SQL_ID,

  14.                 ASH.SQL_CHILD_NUMBER,

  15.                 ASH.SQL_OPNAME,

  16.                 (ASH.MODULE || '--' || ASH.ACTION || '--' || ASH.PROGRAM || '--' ||

  17.                 ASH.MACHINE || '--' || ASH.CLIENT_ID || '--' ||

  18.                 ASH.SESSION_TYPE) SESSION_INFO,

  19.                 COUNT(*) COUNTS,

  20.                 ROUND(COUNT(*) SUM(COUNT(*)) OVER(), 2) PCTLOAD,

  21.                 DENSE_RANK() OVER(ORDER BY COUNT(*) DESC) RANK_ORDER

  22.            FROM GV$ACTIVE_SESSION_HISTORY ASH

  23.           WHERE  ASH.SESSION_TYPE <> 'BACKGROUND'

  24.            AND ASH.SESSION_STATE = 'ON CPU'

  25. AND SAMPLE_TIME > SYSDATE - 1 (24 * 60)

  26.           GROUP BY ASH.INST_ID,

  27.                    ASH.SQL_ID,

  28.                    ASH.SQL_CHILD_NUMBER,

  29.                    ASH.SQL_OPNAME,

  30.                    (ASH.MODULE || '--' || ASH.ACTION || '--' || ASH.PROGRAM || '--' ||

  31.                    ASH.MACHINE || '--' || ASH.CLIENT_ID || '--' ||

  32.                    ASH.SESSION_TYPE)) ASH

  33.   WHERE RANK_ORDER <= 10

  34.   ORDER BY COUNTS DESC;



② 查找最近一分钟内,最消耗CPU的会话:

  1. SELECT SESSION_ID,

  2.        COUNT(*)

  3. FROM   V$ACTIVE_SESSION_HISTORY V

  4. WHERE  V.SESSION_STATE = 'ON CPU'

  5. AND    V.SAMPLE_TIME > SYSDATE - 10/ (24 * 60)

  6. GROUP  BY SESSION_ID

  7. ORDER  BY COUNT(*) DESC;



③ 查找最近一分钟内,最消耗I/OSQL语句:

  1. SELECT ASH.INST_ID,

  2.         ASH.SQL_ID,

  3.         (SELECT VS.SQL_TEXT

  4.            FROM GV$SQLAREA VS

  5.           WHERE VS.SQL_ID = ASH.SQL_ID

  6.             AND ASH.INST_ID = VS.INST_ID) SQL_TEXT,

  7.         ASH.SQL_CHILD_NUMBER,

  8.         ASH.SQL_OPNAME,

  9.         ASH.SESSION_INFO,

  10.         COUNTS,

  11.         PCTLOAD * 100 || '%' PCTLOAD

  12.    FROM (SELECT ASH.INST_ID,

  13.                 ASH.SQL_ID,

  14.                 ASH.SQL_CHILD_NUMBER,

  15.                 ASH.SQL_OPNAME,

  16.                 (ASH.MODULE || '--' || ASH.ACTION || '--' || ASH.PROGRAM || '--' ||

  17.                 ASH.MACHINE || '--' || ASH.CLIENT_ID || '--' ||

  18.                 ASH.SESSION_TYPE) SESSION_INFO,

  19.                 COUNT(*) COUNTS,

  20.                 ROUND(COUNT(*) SUM(COUNT(*)) OVER(), 2) PCTLOAD,

  21.                 DENSE_RANK() OVER(ORDER BY COUNT(*) DESC) RANK_ORDER

  22.            FROM GV$ACTIVE_SESSION_HISTORY ASH

  23.           WHERE ASH.SESSION_TYPE <> 'BACKGROUND'

  24.             AND ASH.SESSION_STATE = 'WAITING'

  25.             AND ASH.SAMPLE_TIME > SYSDATE - 1 (24 * 60)

  26.             AND ASH.WAIT_CLASS = 'USER I/O'

  27.           GROUP BY ASH.INST_ID,

  28.                    ASH.SQL_ID,

  29.                    ASH.SQL_CHILD_NUMBER,

  30.                    ASH.SQL_OPNAME,

  31.                    (ASH.MODULE || '--' || ASH.ACTION || '--' || ASH.PROGRAM || '--' ||

  32.                    ASH.MACHINE || '--' || ASH.CLIENT_ID || '--' ||

  33.                    ASH.SESSION_TYPE)) ASH

  34.   WHERE RANK_ORDER <= 10

  35.   ORDER BY COUNTS DESC;


④ 查找最近一分钟内,最消耗资源的SQL语句:


  1. SELECT ASH.INST_ID,

  2.         ASH.SQL_ID,

  3.         (SELECT VS.SQL_TEXT

  4.            FROM GV$SQLAREA VS

  5.           WHERE VS.SQL_ID = ASH.SQL_ID

  6.             AND ASH.INST_ID = VS.INST_ID) SQL_TEXT,

  7.         ASH.SQL_CHILD_NUMBER,

  8.         ASH.SQL_OPNAME,

  9.         ASH.SESSION_INFO,

  10.         COUNTS,

  11.         PCTLOAD * 100 || '%' PCTLOAD

  12.    FROM (SELECT ASH.INST_ID,

  13.                 ASH.SQL_ID,

  14.                 ASH.SQL_CHILD_NUMBER,

  15.                 ASH.SQL_OPNAME,

  16.                 (ASH.MODULE || '--' || ASH.ACTION || '--' || ASH.PROGRAM || '--' ||

  17.                 ASH.MACHINE || '--' || ASH.CLIENT_ID || '--' ||

  18.                 ASH.SESSION_TYPE) SESSION_INFO,

  19.                 COUNT(*) COUNTS,

  20.                 ROUND(COUNT(*) SUM(COUNT(*)) OVER(), 2) PCTLOAD,

  21.                 DENSE_RANK() OVER(ORDER BY COUNT(*) DESC) RANK_ORDER

  22.            FROM GV$ACTIVE_SESSION_HISTORY ASH

  23.           WHERE ASH.SESSION_TYPE <> 'BACKGROUND'

  24.             AND ASH.SESSION_STATE = 'WAITING'

  25.             AND ASH.SAMPLE_TIME > SYSDATE - 1 (24 * 60)

  26.             AND ASH.WAIT_CLASS = 'USER I/O'

  27.           GROUP BY ASH.INST_ID,

  28.                    ASH.SQL_ID,

  29.                    ASH.SQL_CHILD_NUMBER,

  30.                    ASH.SQL_OPNAME,

  31.                    (ASH.MODULE || '--' || ASH.ACTION || '--' || ASH.PROGRAM || '--' ||

  32.                    ASH.MACHINE || '--' || ASH.CLIENT_ID || '--' ||

  33.                    ASH.SESSION_TYPE)) ASH

  34.   WHERE RANK_ORDER <= 10

  35.   ORDER BY COUNTS DESC;



⑤ 查找最近一分钟内,最消耗资源的会话:

  1. SELECT ASH.SESSION_ID,

  2.        ASH.SESSION_SERIAL#,

  3.        ASH.USER_ID,

  4.        ASH.PROGRAM,

  5.        SUM(DECODE(ASH.SESSION_STATE, 'ON CPU', 1, 0)) "CPU",

  6.        SUM(DECODE(ASH.SESSION_STATE, 'WAITING', 1, 0)) -

  7.        SUM(DECODE(ASH.SESSION_STATE,

  8.                   'WAITING',

  9.                   DECODE(ASH.WAIT_CLASS, 'USER I/O', 1, 0),

  10.                   0)) "WAITING",

  11.        SUM(DECODE(ASH.SESSION_STATE,

  12.                   'WAITING',

  13.                   DECODE(ASH.WAIT_CLASS, 'USER I/O', 1, 0),

  14.                   0)) "IO",

  15.        SUM(DECODE(ASH.SESSION_STATE, 'ON CPU', 1, 1)) "TOTAL"

  16.   FROM V$ACTIVE_SESSION_HISTORY ASH

  17.  WHERE ASH.SAMPLE_TIME > SYSDATE - 1 / (24 * 60)

  18.  GROUP BY ASH.SESSION_ID, ASH.USER_ID, ASH.SESSION_SERIAL#, ASH.PROGRAM

  19.  ORDER BY SUM(DECODE(ASH.SESSION_STATE, 'ON CPU', 1, 1));



& 说明:

有关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:28
文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论