oracle sql awr,在Oracle中,如何用SQL实现AWR报告中Load Profile部分?

WITH TMP_S AS

(SELECT CURR_REDO - LAST_REDO REDOSIZE,

CURR_LOGICALREADS - LAST_LOGICALREADS LOGICALREADS,

CURR_PHYSICALREADS - LAST_PHYSICALREADS PHYSICALREADS,

CURR_EXECUTES - LAST_EXECUTES EXECUTES,

CURR_PARSE - LAST_PARSE PARSE,

CURR_HARDPARSE - LAST_HARDPARSE HARDPARSE,

DECODE((CURR_TRANSACTIONS - LAST_TRANSACTIONS),

0,

NULL,

(CURR_TRANSACTIONS - LAST_TRANSACTIONS)) TRANSACTIONS,

ROUND(((CURRTIME + 0) - (LASTTIME + 0)) * 3600 * 24, 0) SECONDS,

TO_CHAR(CURRTIME, 'yyyy-mm-dd') SNAP_DATE,

TO_CHAR(CURRTIME, 'hh24:mi') CURRTIME,

TO_CHAR(LASTTIME, 'YYYY-MM-DD HH24:MI') || '~' ||

TO_CHAR(CURRTIME, 'YYYY-MM-DD HH24:MI') SNAP_TIME_RANGE,

CURRSNAP_ID ENDSNAP_ID,

TO_CHAR(STARTUP_TIME, 'yyyy-mm-dd hh24:mi:ss') STARTUP_TIME,

SESSIONS || '~' || CURRSESSIONS SESSIONS,

CURSORS1 || '~' || CURRCURSORS CURSORS2,

INSTANCE_NUMBER

FROM (SELECT A.REDO LAST_REDO,

A.LOGICALREADS LAST_LOGICALREADS,

A.PHYSICALREADS LAST_PHYSICALREADS,

A.EXECUTES LAST_EXECUTES,

A.PARSE LAST_PARSE,

A.HARDPARSE LAST_HARDPARSE,

A.TRANSACTIONS LAST_TRANSACTIONS,

A.SESSIONS,

TRUNC(A.CURSORS A.SESSIONS, 2) CURSORS1,

LEAD(A.REDO, 1, NULL) OVER(PARTITION BY B.INSTANCE_NUMBER, B.STARTUP_TIME ORDER BY B.END_INTERVAL_TIME) CURR_REDO,

LEAD(A.LOGICALREADS, 1, NULL) OVER(PARTITION BY B.INSTANCE_NUMBER, B.STARTUP_TIME ORDER BY B.END_INTERVAL_TIME) CURR_LOGICALREADS,

LEAD(A.PHYSICALREADS, 1, NULL) OVER(PARTITION BY B.INSTANCE_NUMBER, B.STARTUP_TIME ORDER BY B.END_INTERVAL_TIME) CURR_PHYSICALREADS,

LEAD(A.EXECUTES, 1, NULL) OVER(PARTITION BY B.INSTANCE_NUMBER, B.STARTUP_TIME ORDER BY B.END_INTERVAL_TIME) CURR_EXECUTES,

LEAD(A.PARSE, 1, NULL) OVER(PARTITION BY B.INSTANCE_NUMBER, B.STARTUP_TIME ORDER BY B.END_INTERVAL_TIME) CURR_PARSE,

LEAD(A.HARDPARSE, 1, NULL) OVER(PARTITION BY B.INSTANCE_NUMBER, B.STARTUP_TIME ORDER BY B.END_INTERVAL_TIME) CURR_HARDPARSE,

LEAD(A.TRANSACTIONS, 1, NULL) OVER(PARTITION BY B.INSTANCE_NUMBER, B.STARTUP_TIME ORDER BY B.END_INTERVAL_TIME) CURR_TRANSACTIONS,

B.END_INTERVAL_TIME LASTTIME,

LEAD(B.END_INTERVAL_TIME, 1, NULL) OVER(PARTITION BY B.INSTANCE_NUMBER, B.STARTUP_TIME ORDER BY B.END_INTERVAL_TIME) CURRTIME,

LEAD(B.SNAP_ID, 1, NULL) OVER(PARTITION BY B.INSTANCE_NUMBER, B.STARTUP_TIME ORDER BY B.END_INTERVAL_TIME) CURRSNAP_ID,

LEAD(A.SESSIONS, 1, NULL) OVER(PARTITION BY B.INSTANCE_NUMBER, B.STARTUP_TIME ORDER BY B.END_INTERVAL_TIME) CURRSESSIONS,

LEAD(TRUNC(A.CURSORS A.SESSIONS, 2), 1, NULL) OVER(PARTITION BY B.INSTANCE_NUMBER, B.STARTUP_TIME ORDER BY B.END_INTERVAL_TIME) CURRCURSORS,

B.STARTUP_TIME,

B.INSTANCE_NUMBER

FROM (SELECT SNAP_ID,

DBID,

INSTANCE_NUMBER,

SUM(DECODE(STAT_NAME, 'redo size', VALUE, 0)) REDO,

SUM(DECODE(STAT_NAME,

'session logical reads',

VALUE,

0)) LOGICALREADS,

SUM(DECODE(STAT_NAME, 'physical reads', VALUE, 0)) PHYSICALREADS,

SUM(DECODE(STAT_NAME, 'execute count', VALUE, 0)) EXECUTES,

SUM(DECODE(STAT_NAME, 'parse count (total)', VALUE, 0)) PARSE,

SUM(DECODE(STAT_NAME, 'parse count (hard)', VALUE, 0)) HARDPARSE,

SUM(DECODE(STAT_NAME,

'user rollbacks',

VALUE,

'user commits',

VALUE,

0)) TRANSACTIONS,

SUM(DECODE(STAT_NAME, 'logons current', VALUE, 0)) SESSIONS,

SUM(DECODE(STAT_NAME,

'opened cursors current',

VALUE,

0)) CURSORS

FROM DBA_HIST_SYSSTAT

WHERE STAT_NAME IN ('redo size',

'session logical reads',

'physical reads',

'execute count',

'user rollbacks',

'user commits',

'parse count (hard)',

'parse count (total)',

'logons current',

'opened cursors current')

GROUP BY SNAP_ID, DBID, INSTANCE_NUMBER) A,

DBA_HIST_SNAPSHOT B

WHERE A.SNAP_ID = B.SNAP_ID

AND A.DBID = B.DBID

AND A.INSTANCE_NUMBER = B.INSTANCE_NUMBER

AND B.END_INTERVAL_TIME > SYSDATE - 7

ORDER BY END_INTERVAL_TIME)),

TMP_T AS

(SELECT LEAD(A.VALUE, 1, NULL) OVER(PARTITION BY B.INSTANCE_NUMBER, B.STARTUP_TIME ORDER BY B.END_INTERVAL_TIME) - A.VALUE DB_TIME,

LEAD(B.SNAP_ID, 1, NULL) OVER(PARTITION BY B.INSTANCE_NUMBER, B.STARTUP_TIME ORDER BY B.END_INTERVAL_TIME) ENDSNAP_ID,

B.SNAP_ID,

B.INSTANCE_NUMBER

FROM DBA_HIST_SYS_TIME_MODEL A, DBA_HIST_SNAPSHOT B

WHERE A.SNAP_ID = B.SNAP_ID

AND A.DBID = B.DBID

AND A.INSTANCE_NUMBER = B.INSTANCE_NUMBER

AND A.STAT_NAME = 'DB time'),

TMP_ASH AS

(SELECT INST_ID, SNAP_ID, COUNT(1) COUNTS

FROM (SELECT N.INSTANCE_NUMBER INST_ID,

N.SNAP_ID,

N.SESSION_ID,

N.SESSION_SERIAL#

FROM DBA_HIST_ACTIVE_SESS_HISTORY N

GROUP BY N.INSTANCE_NUMBER,

N.SNAP_ID,

N.SESSION_ID,

N.SESSION_SERIAL#) NT

GROUP BY NT.INST_ID, NT.SNAP_ID)

SELECT S.SNAP_DATE,

S.INSTANCE_NUMBER INST_ID,

SNAP_TIME_RANGE,

T.SNAP_ID || '~' || (T.SNAP_ID + 1) SNAP_ID_RANGE,

DECODE(S.REDOSIZE, NULL, '--shutdown or end--', S.CURRTIME) "TIME",

STARTUP_TIME,

TO_CHAR(ROUND(S.SECONDS / 60, 2)) "Elapsed(min)",

ROUND(T.DB_TIME / 1000000 / 60, 2) "DB_time(min)",

S.SESSIONS,

(SELECT COUNTS

FROM TMP_ASH NNT

WHERE S.INSTANCE_NUMBER = NNT.INST_ID

AND NNT.SNAP_ID = T.SNAP_ID) || '~' ||

(SELECT COUNTS

FROM TMP_ASH NNT

WHERE S.INSTANCE_NUMBER = NNT.INST_ID

AND NNT.SNAP_ID = T.SNAP_ID + 1) ACTIVE_SESSION,

S.CURSORS2 "Cursors/Session",

S.REDOSIZE REDO,

ROUND(S.REDOSIZE / S.SECONDS, 2) "redo/s",

ROUND(S.REDOSIZE / S.TRANSACTIONS, 2) "redo/t",

S.LOGICALREADS LOGICAL,

ROUND(S.LOGICALREADS / S.SECONDS, 2) "logical/s",

ROUND(S.LOGICALREADS / S.TRANSACTIONS, 2) "logical/t",

PHYSICALREADS PHYSICAL,

ROUND(S.PHYSICALREADS / S.SECONDS, 2) "phy/s",

ROUND(S.PHYSICALREADS / S.TRANSACTIONS, 2) "phy/t",

S.EXECUTES EXECS,

ROUND(S.EXECUTES / S.SECONDS, 2) "execs/s",

ROUND(S.EXECUTES / S.TRANSACTIONS, 2) "execs/t",

S.PARSE,

ROUND(S.PARSE / S.SECONDS, 2) "parse/s",

ROUND(S.PARSE / S.TRANSACTIONS, 2) "parse/t",

S.HARDPARSE,

ROUND(S.HARDPARSE / S.SECONDS, 2) "hardparse/s",

ROUND(S.HARDPARSE / S.TRANSACTIONS, 2) "hardparse/t",

S.TRANSACTIONS TRANS,

ROUND(S.TRANSACTIONS / S.SECONDS, 2) "trans/s"

FROM TMP_S S, TMP_T T

WHERE S.ENDSNAP_ID = T.ENDSNAP_ID

AND T.INSTANCE_NUMBER = S.INSTANCE_NUMBER

ORDER BY S.INSTANCE_NUMBER, S.SNAP_DATE DESC, SNAP_ID DESC, TIME ASC;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值