首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle会话活动过去10秒

Oracle会话活动过去10秒
EN

Stack Overflow用户
提问于 2018-08-31 23:49:31
回答 1查看 249关注 0票数 0

我希望将此查询转换为过去10秒,而不是过去几个小时

代码语言:javascript
复制
SELECT TO_CHAR(SAMPLE_TIME, 'HH24:MI ') AS SAMPLE_TIME,
       ROUND(OTHER / 60, 3) AS OTHER,
       ROUND(CLUST / 60, 3) AS CLUST,
       ROUND(QUEUEING / 60, 3) AS QUEUEING,
       ROUND(NETWORK / 60, 3) AS NETWORK,
       ROUND(ADMINISTRATIVE / 60, 3) AS ADMINISTRATIVE,
       ROUND(CONFIGURATION / 60, 3) AS CONFIGURATION,
       ROUND(COMMIT / 60, 3) AS COMMIT,
       ROUND(APPLICATION / 60, 3) AS APPLICATION,
       ROUND(CONCURRENCY / 60, 3) AS CONCURRENCY,
       ROUND(SIO / 60, 3) AS SYSTEM_IO,
       ROUND(UIO / 60, 3) AS USER_IO,
       ROUND(SCHEDULER / 60, 3) AS SCHEDULER,
       ROUND(CPU / 60, 3) AS CPU,
       ROUND(BCPU / 60, 3) AS BACKGROUND_CPU
  FROM (SELECT TRUNC(SAMPLE_TIME, 'MI') AS SAMPLE_TIME,
               DECODE(SESSION_STATE,
                      'ON CPU',
                      DECODE(SESSION_TYPE, 'BACKGROUND', 'BCPU', 'ON CPU'),
                      WAIT_CLASS) AS WAIT_CLASS
          FROM V$ACTIVE_SESSION_HISTORY
         WHERE SAMPLE_TIME > SYSDATE - INTERVAL '1'HOUR AND SAMPLE_TIME <= TRUNC(SYSDATE, 'MI')) ASH PIVOT(COUNT(*) 
  FOR WAIT_CLASS IN('ON CPU' AS CPU,'BCPU' AS BCPU,'Scheduler' AS SCHEDULER,'User I/O' AS UIO,'System I/O' AS SIO, 'Concurrency' AS CONCURRENCY, 
'Application' AS  APPLICATION,COMMIT,                                                                             
'Configuration' AS CONFIGURATION,                     
'Administrative' AS   ADMINISTRATIVE,                                                                                 
'Network' AS  NETWORK,                                                                                 
'Queueing' AS   QUEUEING,                                                                                  
'Cluster' AS   CLUST,                                                                                      
'Other' AS  OTHER))
ORDER BY 1  

我尝试在SAMPLE_TIME > SYSDATE - (10)/(24*60*60)的地方使用它,但它不起作用。它能在几分钟内给出结果。但是我想要最后10秒(所以10行)

EN

回答 1

Stack Overflow用户

发布于 2018-09-01 00:53:44

您需要更改外部选择列表,以包括秒数:

代码语言:javascript
复制
SELECT TO_CHAR(SAMPLE_TIME, 'HH24:MI:SS') AS SAMPLE_TIME,

您需要从内部查询选择列表中删除分钟级截断:

代码语言:javascript
复制
  FROM (SELECT SAMPLE_TIME,

您需要更改sample time过滤器(因为该列是一个时间戳,所以最好使用systimestamp和一个时间间隔,这样它就可以保持为1):

代码语言:javascript
复制
         WHERE SAMPLE_TIME > SYSTIMESTAMP - INTERVAL '10' SECOND
  )
  ASH PIVOT(COUNT(*) 

正如注释中指出的,你的COMMIT应该是'Commit' as COMMIT,否则你会得到"ORA-56901:非常量表达式不允许透视|非透视值“,至少在11gR2,12cR1和12cR2中是这样;而且你需要提供实际的wait_class名称,因为它无论如何都会出现在ASH视图中。

通过这些更改,查询似乎可以执行您想要的操作。它不一定会显示10行,因为可能不是每秒都有样本;例如,在非常安静的数据库上,我通常不显示行,或者只显示几行。

代码语言:javascript
复制
SELECT TO_CHAR(SAMPLE_TIME, 'HH24:MI:SS ') AS SAMPLE_TIME,
       ROUND(OTHER / 60, 3) AS OTHER,
       ROUND(CLUST / 60, 3) AS CLUST,
       ROUND(QUEUEING / 60, 3) AS QUEUEING,
       ROUND(NETWORK / 60, 3) AS NETWORK,
       ROUND(ADMINISTRATIVE / 60, 3) AS ADMINISTRATIVE,
       ROUND(CONFIGURATION / 60, 3) AS CONFIGURATION,
       ROUND(COMMIT / 60, 3) AS COMMIT,
       ROUND(APPLICATION / 60, 3) AS APPLICATION,
       ROUND(CONCURRENCY / 60, 3) AS CONCURRENCY,
       ROUND(SIO / 60, 3) AS SYSTEM_IO,
       ROUND(UIO / 60, 3) AS USER_IO,
       ROUND(SCHEDULER / 60, 3) AS SCHEDULER,
       ROUND(CPU / 60, 3) AS CPU,
       ROUND(BCPU / 60, 3) AS BACKGROUND_CPU
  FROM (SELECT SAMPLE_TIME AS SAMPLE_TIME,
             DECODE(SESSION_STATE,
                    'ON CPU',
                    DECODE(SESSION_TYPE, 'BACKGROUND', 'BCPU', 'ON CPU'),
                    WAIT_CLASS) AS WAIT_CLASS
          FROM V$ACTIVE_SESSION_HISTORY
         WHERE SAMPLE_TIME > SYSTIMESTAMP - INTERVAL '10' second
  ) ASH
PIVOT (
  COUNT(*) 
  FOR WAIT_CLASS IN ('ON CPU' AS CPU,
    'BCPU' AS BCPU,
    'Scheduler' AS SCHEDULER,
    'User I/O' AS UIO,
    'System I/O' AS SIO,
    'Concurrency' AS CONCURRENCY, 
    'Application' AS  APPLICATION,
    'Commit' as COMMIT,
    'Configuration' AS CONFIGURATION,
    'Administrative' AS   ADMINISTRATIVE,
    'Network' AS  NETWORK,
    'Queueing' AS   QUEUEING,
    'Cluster' AS   CLUST,
    'Other' AS  OTHER)
)
ORDER BY 1  
/
代码语言:javascript
复制
SAMPLE_TI      OTHER      CLUST   QUEUEING    NETWORK ADMINISTRATIVE CONFIGURATION     COMMIT APPLICATION CONCURRENCY  SYSTEM_IO    USER_IO  SCHEDULER        CPU BACKGROUND_CPU
--------- ---------- ---------- ---------- ---------- -------------- ------------- ---------- ----------- ----------- ---------- ---------- ---------- ---------- --------------
17:57:26           0          0          0          0              0             0          0           0           0          0          0          0       .017              0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52118967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档