oracle-查询指定时间范围内最消耗资源的前100条sql

简介:
SET SERVEROUT ON SIZE UNLIMITED;
REM 查询指定时间范围内最消耗资源,按照elapsed_time、cpu_time或者buffer_gets,gets_per_row排序的前100条sql
PRO
PRO
PRO 查询指定时间范围内最消耗资源,按照elapsed_time、cpu_time或者buffer_gets,gets_per_row排序的前100条sql
SET TERM ON ECHO OFF;
SET VERIFY off;
ACCEPT begintime CHAR PROMPT 'Enter begin_time(eg:201805030001): '
ACCEPT endtime CHAR PROMPT 'Enter end_time(eg:201805031001): '
ACCEPT rank CHAR DEFAULT 'time_rank' PROMPT 'Enter Rank column(eg:time_rank,cputime_rank,gets_rank,gets_per_row_rank): '
col begintime new_value begintime noprint
col endtime new_value endtime noprint

set line 250
set pages 150
col begin_time for a12
col end_time for a12
col sql_id for a15
col plans_diff for 99
col cputime_per_exec for 999990.999
col time_per_exec for 999990.999
col gets_per_exec for 999999999
col rows_per_exec for 99999990.99
col cputime_delta for 99999990.999
col time_delta for 999999990.999
col exec_delta for 9999999999999
col gets_d for 9999999999
col rows_d for 999999999
col cputime_rank for 9999
col time_rank for 9999
col gets_rank for 9999
col gets_per_row_rank for 9999

spool /tmp/tmp.sql
select * from (
select 
    a.sql_id sql_id,
    to_char(min(b.begin_interval_time),'yyyymmddhh24') begin_time,
    to_char(max(b.end_interval_time),'yyyymmddhh24') end_time,
    count(distinct(a.plan_hash_value)) plans_diff,
    round(decode(sum(a.EXECUTIONS_DELTA),0,sum(a.CPU_TIME_DELTA/1000000),sum(a.CPU_TIME_DELTA/1000000)/sum(a.EXECUTIONS_DELTA)),3) cputime_per_exec,
    round(decode(sum(a.EXECUTIONS_DELTA),0,sum(a.ELAPSED_TIME_DELTA/1000000),sum(a.ELAPSED_TIME_DELTA/1000000)/sum(a.EXECUTIONS_DELTA)),3) time_per_exec,
    round(decode(sum(a.EXECUTIONS_DELTA),0, sum(a.BUFFER_GETS_DELTA ), sum(a.BUFFER_GETS_DELTA )/sum(a.EXECUTIONS_DELTA)),0) gets_per_exec,
    round(decode(sum(a.EXECUTIONS_DELTA),0,sum(a.ROWS_PROCESSED_DELTA),sum(a.ROWS_PROCESSED_DELTA)/sum(a.EXECUTIONS_DELTA)),2) rows_per_exec,
    round(sum(a.CPU_TIME_DELTA/1000000),3) cputime_delta,
    round(sum(a.ELAPSED_TIME_DELTA/1000000),3) time_delta,
    sum(a.EXECUTIONS_DELTA) exec_delta,
    sum(a.BUFFER_GETS_DELTA ) gets_delta,    
    sum(a.ROWS_PROCESSED_DELTA) rows_delta,
    DENSE_RANK() OVER (ORDER BY decode(sum(a.EXECUTIONS_DELTA),0,sum(a.CPU_TIME_DELTA/1000000),sum(a.CPU_TIME_DELTA/1000000)/sum(a.EXECUTIONS_DELTA)) DESC) cputime_rank,
    DENSE_RANK() OVER (ORDER BY decode(sum(a.EXECUTIONS_DELTA),0,sum(a.ELAPSED_TIME_DELTA/1000000),sum(a.ELAPSED_TIME_DELTA/1000000)/sum(a.EXECUTIONS_DELTA)) DESC) time_rank,
    DENSE_RANK() OVER (ORDER BY decode(sum(a.EXECUTIONS_DELTA),0, sum(a.BUFFER_GETS_DELTA), sum(a.BUFFER_GETS_DELTA )/sum(a.EXECUTIONS_DELTA)) DESC) gets_rank,
    DENSE_RANK() OVER (ORDER BY decode(sum(a.ROWS_PROCESSED_DELTA),0, sum(a.BUFFER_GETS_DELTA)/sum(EXECUTIONS_DELTA), sum(a.BUFFER_GETS_DELTA )/sum(a.ROWS_PROCESSED_DELTA)) DESC) gets_per_row_rank
from  
    dba_hist_sqlstat a,
    dba_hist_snapshot b
where
    a.snap_id = b.snap_id
and
    b.BEGIN_INTERVAL_TIME between to_date('&begintime','yyyymmddhh24mi') and to_date('&endtime','yyyymmddhh24mi')
and 
    a.executions_delta > 0    
group by 
    a.sql_id
having 
   sum(a.EXECUTIONS_DELTA) > round(to_number(to_date('&begintime','yyyymmddhh24mi') - to_date('&endtime','yyyymmddhh24mi')) * 24)
)
where &rank <= 100  
order by &rank,time_rank,cputime_rank ,gets_per_row_rank,gets_rank;
spool off
目录
相关文章
|
9月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
606 8
|
Oracle 关系型数据库 Linux
【YashanDB 知识库】通过 dblink 查询 Oracle 数据时报 YAS-07301 异常
客户在使用 YashanDB 通过 yasql 查询 Oracle 数据时,遇到 `YAS-07301 external module timeout` 异常,导致 dblink 功能无法正常使用,影响所有 YashanDB 版本。原因是操作系统资源紧张,无法 fork 新子进程。解决方法包括释放内存、停掉不必要的进程或增大进程数上限。分析发现异常源于 system() 函数调用失败,返回 -1,通常是因为 fork() 失败。未来 YashanDB 将优化日志信息以更好地诊断类似问题。
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的闪回版本查询
本文介绍了Oracle数据库的闪回版本查询(Flashback Version Query)功能,通过示例详细讲解了其使用方法。闪回版本查询可获取指定时间区间内行的不同版本,利用`versions between`子句实现。文中包含视频讲解,并通过创建测试表、插入数据及执行查询等步骤,演示如何获取历史版本信息和伪列详情,帮助用户深入了解该功能的实际应用。
402 13
|
SQL Oracle 关系型数据库
解决大小写、保留字与特殊字符问题!Oracle双引号在SQL中的特殊应用
在Oracle数据库开发中,双引号的使用是一个重要但易被忽视的细节。本文全面解析了双引号在SQL中的特殊应用场景,包括解决标识符与保留字冲突、强制保留大小写、支持特殊字符和数字开头标识符等。同时提供了最佳实践建议,帮助开发者规避常见错误,提高代码可维护性和效率。
613 6
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回事务查询
Oracle数据库的闪回事务查询(Flashback Transaction Query)是闪回版本查询的扩充,可用于审计或撤销已提交的事务。通过`flashback_transaction_query`视图,可生成还原特定事务的SQL语句。本文介绍了其基本概念,并通过实战演示如何使用该功能:从授权、开启UNDO数据增强,到创建测试表和事务,最后利用闪回查询撤销已提交的事务,验证数据恢复效果。附带视频讲解,帮助深入理解。
413 3
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
|
Oracle 关系型数据库 Linux
【YashanDB知识库】通过dblink查询Oracle数据时报YAS-07301异常
【YashanDB知识库】通过dblink查询Oracle数据时报YAS-07301异常
|
SQL Oracle 关系型数据库
【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差
【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差
|
Oracle 关系型数据库 MySQL
【YashanDB知识库】oracle dblink varchar类型查询报错记录
这篇文章主要介绍了 Oracle DBLINK 查询崖山 DB 报错的相关内容,包括 ODBC 安装配置、数据源配置、dblink 环境配置、问题原因分析及规避方法。问题原因是 dblink 连接其他数据库时 varchar 类型转换导致的,还介绍了 long 类型限制、char 等类型区别,规避方法是修改参数 MAX_STRING_SIZE 支持 32K。
|
Oracle 关系型数据库 Linux
【YashanDB 知识库】通过 dblink 查询 Oracle 数据时报 YAS-07301 异常
某客户在使用 YashanDB 通过 yasql 查询 Oracle 数据时,遇到 `YAS-07301 external module timeout` 异常,导致 dblink 功能无法正常使用,影响所有版本。问题源于操作系统资源紧张,无法 fork 新子进程。解决方法包括释放内存、停掉不必要的进程或增大进程数上限。分析发现异常原因为系统调用 fork() 失败。经验总结:优化日志记录,提供更多异常信息。

推荐镜像

更多