在Oracle中,如何通过SQL语句查询数据库服务器主机的CPU和内存情况以及各个快照期间的DB TIME和ELAPSED_TIME的值?
可以通过如下的SQL语句查询:
SELECT SNAP_ID,
BEGIN_INTERVAL_TIME,
END_INTERVAL_TIME,
DB_NAME,
DBID,
INSTANCE_NAME,
INSTANCE_NUMBER,
STARTUP_TIME,
RELEASE,
RAC,
HOST_NAME,
PLATFORM_NAME,
CPUS,
CORES,
SOCKETS,
MEMORY_G,
ELAPSED_TIME,
DB_TIME
FROM (SELECT S.SNAP_ID,
TO_CHAR(S.BEGIN_INTERVAL_TIME, 'YYYY-MM-DD HH24:MI:SS') BEGIN_INTERVAL_TIME,
TO_CHAR(S.END_INTERVAL_TIME, 'YYYY-MM-DD HH24:MI:SS') END_INTERVAL_TIME,
DB_NAME,
S.DBID,
INSTANCE_NAME,
S.INSTANCE_NUMBER,
TO_CHAR(S.STARTUP_TIME, 'YYYY-MM-DD hh24:MI:SS') STARTUP_TIME,
VERSION RELEASE,
PARALLEL RAC,
HOST_NAME,
DI.PLATFORM_NAME,
V.CPUS CPUS,
V.CORES,
V.SOCKETS,
V.MEMORY MEMORY_G,
ROUND(EXTRACT(DAY FROM
S.END_INTERVAL_TIME - S.BEGIN_INTERVAL_TIME) * 1440 +
EXTRACT(HOUR FROM
S.END_INTERVAL_TIME - S.BEGIN_INTERVAL_TIME) * 60 +
EXTRACT(MINUTE FROM
S.END_INTERVAL_TIME - S.BEGIN_INTERVAL_TIME) +
EXTRACT(SECOND FROM
S.END_INTERVAL_TIME - S.BEGIN_INTERVAL_TIME) / 60,
2) ELAPSED_TIME,
ROUND((E.VALUE - B.VALUE) / 1000000 / 60, 2) DB_TIME,
RANK() OVER(PARTITION BY S.INSTANCE_NUMBER ORDER BY S.SNAP_ID DESC) AS DRANK
FROM DBA_HIST_SNAPSHOT S
LEFT JOIN (SELECT SNAP_ID,
DBID,
INSTANCE_NUMBER,
SUM(CPUS) CPUS,
SUM(CORES) CORES,
SUM(SOCKETS) SOCKETS,
SUM(MEMORY) MEMORY
FROM (SELECT O.SNAP_ID,
O.DBID,
O.INSTANCE_NUMBER,
DECODE(O.STAT_NAME, 'NUM_CPUS', O.VALUE) CPUS,
DECODE(O.STAT_NAME,
'NUM_CPU_CORES',
O.VALUE) CORES,
DECODE(O.STAT_NAME,
'NUM_CPU_SOCKETS',
O.VALUE) SOCKETS,
DECODE(O.STAT_NAME,
'PHYSICAL_MEMORY_BYTES',
TRUNC(O.VALUE / 1024 / 1024 / 1024,
2)) MEMORY
FROM DBA_HIST_OSSTAT O
WHERE O.STAT_NAME IN
('NUM_CPUS',
'NUM_CPU_CORES',
'NUM_CPU_SOCKETS',
'PHYSICAL_MEMORY_BYTES'))
GROUP BY SNAP_ID, DBID, INSTANCE_NUMBER) V
ON (S.SNAP_ID = V.SNAP_ID AND S.DBID = S.DBID AND
S.INSTANCE_NUMBER = V.INSTANCE_NUMBER)
LEFT OUTER JOIN DBA_HIST_DATABASE_INSTANCE DI
ON (S.INSTANCE_NUMBER = DI.INSTANCE_NUMBER AND
S.STARTUP_TIME = DI.STARTUP_TIME AND S.DBID = DI.DBID)
LEFT OUTER JOIN DBA_HIST_SYS_TIME_MODEL E
ON (E.SNAP_ID = S.SNAP_ID AND
E.INSTANCE_NUMBER = S.INSTANCE_NUMBER AND
E.STAT_NAME = 'DB time')
LEFT OUTER JOIN DBA_HIST_SYS_TIME_MODEL B
ON (B.SNAP_ID + 1 = S.SNAP_ID AND E.STAT_ID = B.STAT_ID AND
E.INSTANCE_NUMBER = B.INSTANCE_NUMBER))
WHERE DRANK <= 10
ORDER BY INSTANCE_NUMBER, SNAP_ID DESC;
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:230161599
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。




