暂无图片
暂无图片
3
暂无图片
暂无图片
2
暂无图片

查找最消耗资源的SQL

原创 南风 2020-11-06
2061

sql

select machine,program, count(1) from v$session group by machine,program order by 3 desc

1、查找最近一天内,最消耗CPU的SQL语句

SELECT ASH.INST_ID,
ASH.SQL_ID,
(SELECT VS.SQL_TEXT
FROM GVSQLAREA VS WHERE VS.SQL_ID = ASH.SQL_ID AND ASH.INST_ID = VS.INST_ID) SQL_TEXT, ASH.SQL_CHILD_NUMBER, ASH.SQL_OPNAME, ASH.SESSION_INFO, COUNTS, PCTLOAD * 100 || '%' PCTLOAD FROM (SELECT ASH.INST_ID, ASH.SQL_ID, ASH.SQL_CHILD_NUMBER, ASH.SQL_OPNAME, (ASH.MODULE || '--' || ASH.ACTION || '--' || ASH.PROGRAM || '--' || ASH.MACHINE || '--' || ASH.CLIENT_ID || '--' || ASH.SESSION_TYPE) SESSION_INFO, COUNT(*) COUNTS, ROUND(COUNT(*) / SUM(COUNT(*)) OVER(), 2) PCTLOAD, DENSE_RANK() OVER(ORDER BY COUNT(*) DESC) RANK_ORDER FROM GVACTIVE_SESSION_HISTORY ASH
WHERE ASH.SESSION_TYPE <> ‘BACKGROUND’
AND ASH.SESSION_STATE = ‘ON CPU’
AND SAMPLE_TIME > SYSDATE - 1
GROUP BY ASH.INST_ID,
ASH.SQL_ID,
ASH.SQL_CHILD_NUMBER,
ASH.SQL_OPNAME,
(ASH.MODULE || ‘–’ || ASH.ACTION || ‘–’ || ASH.PROGRAM || ‘–’ ||
ASH.MACHINE || ‘–’ || ASH.CLIENT_ID || ‘–’ ||
ASH.SESSION_TYPE)) ASH
WHERE RANK_ORDER <= 10
ORDER BY COUNTS DESC;

2、查找最近一天内,最消耗CPU的会话

SELECT SESSION_ID, COUNT()
FROM V$ACTIVE_SESSION_HISTORY V
WHERE V.SESSION_STATE = ‘ON CPU’
AND V.SAMPLE_TIME > SYSDATE - 1
GROUP BY SESSION_ID
ORDER BY COUNT(
) DESC;

3、查找最近一天内,最消耗I/O的SQL语句

SELECT ASH.INST_ID,
ASH.SQL_ID,
(SELECT VS.SQL_TEXT
FROM GVSQLAREA VS WHERE VS.SQL_ID = ASH.SQL_ID AND ASH.INST_ID = VS.INST_ID) SQL_TEXT, ASH.SQL_CHILD_NUMBER, ASH.SQL_OPNAME, ASH.SESSION_INFO, COUNTS, PCTLOAD * 100 || '%' PCTLOAD FROM (SELECT ASH.INST_ID, ASH.SQL_ID, ASH.SQL_CHILD_NUMBER, ASH.SQL_OPNAME, (ASH.MODULE || '--' || ASH.ACTION || '--' || ASH.PROGRAM || '--' || ASH.MACHINE || '--' || ASH.CLIENT_ID || '--' || ASH.SESSION_TYPE) SESSION_INFO, COUNT(*) COUNTS, ROUND(COUNT(*) / SUM(COUNT(*)) OVER(), 2) PCTLOAD, DENSE_RANK() OVER(ORDER BY COUNT(*) DESC) RANK_ORDER FROM GVACTIVE_SESSION_HISTORY ASH
WHERE ASH.SESSION_TYPE <> ‘BACKGROUND’
AND ASH.SESSION_STATE = ‘WAITING’
AND ASH.SAMPLE_TIME > SYSDATE - 1
AND ASH.WAIT_CLASS = ‘USER I/O’
GROUP BY ASH.INST_ID,
ASH.SQL_ID,
ASH.SQL_CHILD_NUMBER,
ASH.SQL_OPNAME,
(ASH.MODULE || ‘–’ || ASH.ACTION || ‘–’ || ASH.PROGRAM || ‘–’ ||
ASH.MACHINE || ‘–’ || ASH.CLIENT_ID || ‘–’ ||
ASH.SESSION_TYPE)) ASH
WHERE RANK_ORDER <= 10
ORDER BY COUNTS DESC;

4、查找最近一天内,最消耗资源的SQL语句
SELECT ASH.INST_ID,
ASH.SQL_ID,
(SELECT VS.SQL_TEXT
FROM GVSQLAREA VS WHERE VS.SQL_ID = ASH.SQL_ID AND ASH.INST_ID = VS.INST_ID) SQL_TEXT, ASH.SQL_CHILD_NUMBER, ASH.SQL_OPNAME, ASH.SESSION_INFO, COUNTS, PCTLOAD * 100 || '%' PCTLOAD FROM (SELECT ASH.INST_ID, ASH.SQL_ID, ASH.SQL_CHILD_NUMBER, ASH.SQL_OPNAME, (ASH.MODULE || '--' || ASH.ACTION || '--' || ASH.PROGRAM || '--' || ASH.MACHINE || '--' || ASH.CLIENT_ID || '--' || ASH.SESSION_TYPE) SESSION_INFO, COUNT(*) COUNTS, ROUND(COUNT(*) / SUM(COUNT(*)) OVER(), 2) PCTLOAD, DENSE_RANK() OVER(ORDER BY COUNT(*) DESC) RANK_ORDER FROM GVACTIVE_SESSION_HISTORY ASH
WHERE ASH.SESSION_TYPE <> ‘BACKGROUND’
AND ASH.SESSION_STATE = ‘WAITING’
AND ASH.SAMPLE_TIME > SYSDATE - 1
AND ASH.WAIT_CLASS = ‘USER I/O’
GROUP BY ASH.INST_ID,
ASH.SQL_ID,
ASH.SQL_CHILD_NUMBER,
ASH.SQL_OPNAME,
(ASH.MODULE || ‘–’ || ASH.ACTION || ‘–’ || ASH.PROGRAM || ‘–’ ||
ASH.MACHINE || ‘–’ || ASH.CLIENT_ID || ‘–’ ||
ASH.SESSION_TYPE)) ASH
WHERE RANK_ORDER <= 10
ORDER BY COUNTS DESC;

5、查找最近一天内,最消耗资源的会话
SELECT ASH.SESSION_ID,
ASH.SESSION_SERIAL#,
ASH.USER_ID,
ASH.PROGRAM,
SUM(DECODE(ASH.SESSION_STATE, ‘ON CPU’, 1, 0)) “CPU”,
SUM(DECODE(ASH.SESSION_STATE, ‘WAITING’, 1, 0)) -
SUM(DECODE(ASH.SESSION_STATE,
‘WAITING’,
DECODE(ASH.WAIT_CLASS, ‘USER I/O’, 1, 0),
0)) “WAITING”,
SUM(DECODE(ASH.SESSION_STATE,
‘WAITING’,
DECODE(ASH.WAIT_CLASS, ‘USER I/O’, 1, 0),
0)) “IO”,
SUM(DECODE(ASH.SESSION_STATE, ‘ON CPU’, 1, 1)) “TOTAL”
FROM V$ACTIVE_SESSION_HISTORY ASH
WHERE ASH.SAMPLE_TIME > SYSDATE - 1
GROUP BY ASH.SESSION_ID, ASH.USER_ID, ASH.SESSION_SERIAL#, ASH.PROGRAM
ORDER BY SUM(DECODE(ASH.SESSION_STATE, ‘ON CPU’, 1, 1));

1、在以上图中使用系统进程PID查询对应的物理地址

SELECT v.addr,v.* FROM v$process v
WHERE v.SPID = ‘’5256;

2、通过该物理地址查找对应的SQL_ID

SELECT t.SQL_ID,t.* FROM v$session t
WHERE t.paddr= ‘000000025C5EB9F8’;

3、通过SQL_ID来查找对应的SQL语句

SELECT sql_text FROM v$sql
WHERE sql_id = ‘dqu970xzs3gpv’;

dbd_vehicle_gpsinfo

以上3句合并为一句:

SELECT s.sql_text
FROM vsqls,vsql s, vsession t,
v$process v
WHERE s.sql_id = t.SQL_ID
AND t.PADDR = v.ADDR
AND v.SPID = ‘15266’;

通过此sql语句具体分析问题

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
1人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

小蛋蛋
暂无图片
4年前
评论
暂无图片 0
你这格式是真的烂
4年前
暂无图片 点赞
评论
小小亮
暂无图片
4年前
评论
暂无图片 0
建议 代码,可以使用编辑框格式栏的的“插入代码” 就更好了,或者 您可以看看这篇《Markdown语法的文章格式设置》 https://www.modb.pro/db/25904
4年前
暂无图片 点赞
评论