首页 > 数据库 >Oracle获取吞吐量和IOPS的脚本

Oracle获取吞吐量和IOPS的脚本

时间:2024-06-03 17:45:08浏览次数:33  
标签:stat end interval value 吞吐量 IOPS hh24 time Oracle

 

Oracle获取吞吐量和IOPS的脚本

 

数据底层存储要换盘,对新盘做IOPS压测。

并花了点时间写了脚本获取数据库每秒的吞吐量和IOPS信息。

可以将数据导成excel并绘制为折线图等统计图。 

 

--获取 IOPS(当前实例)
select to_char(t.begin_interval_time, 'yyyy-mm-dd hh24:mi') || ' -> ' ||
       to_char(t.end_interval_time, 'hh24:mi') "TimeRange",
       --t.seconds "Seconds",
       round(sum(t.PhyRWTotalIOReq) / t.seconds, 2) IOPS
  from (select b.begin_interval_time,
               b.end_interval_time,
               (to_date(b.end_interval_time, 'yyyy-mm-dd hh24:mi:ss') -
               to_date(b.begin_interval_time, 'yyyy-mm-dd hh24:mi:ss')) * 24 * 60 * 60 seconds,
               a.stat_name,
               lag(a.value, 1) over(partition by stat_name order by b.end_interval_time) last_value,
               a.value,
               a.value - lag(a.value, 1) over(partition by stat_name order by b.end_interval_time) PhyRWTotalIOReq
          from dba_hist_sysstat a, dba_hist_snapshot b
         where a.snap_id = b.snap_id
           and a.instance_number = b.instance_number
           and a.instance_number = (select instance_number from v$Instance)
           and a.stat_name in
               ('physical read total IO requests',
                'physical write total IO requests')
         order by a.stat_name, b.end_interval_time) t
 where t.last_value is not null
 group by t.begin_interval_time, t.end_interval_time, t.seconds
 order by t.end_interval_time;

 

 

--获取 IOPS (全部实例)
select to_char(t.begin_interval_time, 'yyyy-mm-dd hh24:mi') || ' -> ' || to_char(t.end_interval_time, 'hh24:mi') "TimeRange",
       round(sum(t.PhyRWTotalIOReq) / t.seconds, 2) IOPS
  from (select b.begin_interval_time,
               b.end_interval_time,
               (to_date(b.end_interval_time, 'yyyy-mm-dd hh24:mi:ss') -
               to_date(b.begin_interval_time, 'yyyy-mm-dd hh24:mi:ss')) * 24 * 60 * 60 seconds,
               a.stat_name,
               lag(a.value, 1) over(partition by a.instance_number, stat_name order by b.end_interval_time) last_value,
               a.value,
               a.value - lag(a.value, 1) over(partition by a.instance_number, stat_name order by b.end_interval_time) PhyRWTotalIOReq
          from dba_hist_sysstat a, dba_hist_snapshot b
         where a.snap_id = b.snap_id
           and a.instance_number = b.instance_number
           and a.stat_name in
               ('physical read total IO requests',
                'physical write total IO requests')
         order by a.instance_number, a.stat_name, b.end_interval_time) t
 where t.last_value is not null
 group by to_char(t.begin_interval_time, 'yyyy-mm-dd hh24:mi') || ' -> ' || to_char(t.end_interval_time, 'hh24:mi'),
          t.seconds
 order by 1;

 

 

--获取 throughput(当前实例)
select to_char(t.begin_interval_time, 'yyyy-mm-dd hh24:mi') || ' -> ' ||
       to_char(t.end_interval_time, 'hh24:mi') "TimeRange",
       --t.seconds "Seconds",
       round(sum(t.PhyRWTotalBytes) / t.seconds, 2) "ThroughputPersBytes"
  from (select b.begin_interval_time,
               b.end_interval_time,
               (to_date(b.end_interval_time, 'yyyy-mm-dd hh24:mi:ss') -
               to_date(b.begin_interval_time, 'yyyy-mm-dd hh24:mi:ss')) * 24 * 60 * 60 seconds,
               a.stat_name,
               lag(a.value, 1) over(partition by stat_name order by b.end_interval_time) last_value,
               a.value,
               a.value - lag(a.value, 1) over(partition by stat_name order by b.end_interval_time) PhyRWTotalBytes
          from dba_hist_sysstat a, dba_hist_snapshot b
         where a.snap_id = b.snap_id
           and a.instance_number = b.instance_number
           and a.instance_number = (select instance_number from v$Instance)
           and a.stat_name in
               ('physical read total bytes', 'physical write total bytes')
         order by a.stat_name, b.end_interval_time) t
 where t.last_value is not null
 group by t.begin_interval_time, t.end_interval_time, t.seconds
 order by t.end_interval_time;

 

 

--获取 throughput(全部实例)
select to_char(t.begin_interval_time, 'yyyy-mm-dd hh24:mi') || ' -> ' || to_char(t.end_interval_time, 'hh24:mi') "TimeRange",
       --t.seconds "Seconds",
       round(sum(t.PhyRWTotalBytes) / t.seconds, 2) "ThroughputPersBytes"
  from (select b.begin_interval_time,
               b.end_interval_time,
               (to_date(b.end_interval_time, 'yyyy-mm-dd hh24:mi:ss') -
               to_date(b.begin_interval_time, 'yyyy-mm-dd hh24:mi:ss')) * 24 * 60 * 60 seconds,
               a.stat_name,
               lag(a.value, 1) over(partition by a.instance_number, stat_name order by b.end_interval_time) last_value,
               a.value,
               a.value - lag(a.value, 1) over(partition by a.instance_number, stat_name order by b.end_interval_time) PhyRWTotalBytes
          from dba_hist_sysstat a, dba_hist_snapshot b
         where a.snap_id = b.snap_id
           and a.instance_number = b.instance_number
           and a.stat_name in
               ('physical read total bytes', 'physical write total bytes')
         order by a.instance_number, a.stat_name, b.end_interval_time) t
 where t.last_value is not null
 group by to_char(t.begin_interval_time, 'yyyy-mm-dd hh24:mi') || ' -> ' || to_char(t.end_interval_time, 'hh24:mi'), t.seconds
 order by 1;

 

https://www.cnblogs.com/PiscesCanon/p/18229342

防。

 

折线图效果:

 

 

 

标签:stat,end,interval,value,吞吐量,IOPS,hh24,time,Oracle
From: https://www.cnblogs.com/PiscesCanon/p/18229342

相关文章

  • Oracle RU和RUR(补丁)
    以前Oracle的周期是约5年省级一个大版本,在这个大版本上做小的升级(PSU与BP),在12c发布以后,oracle数据库产品的新版本发布改为每年一次。随着版本的变化,oracle的升级也发生了变化。12.2以后,主要是通过RU(ReleaseUpdates)与RUR(ReleaseUpdateRevisions)升级,那么什么是RU(ReleaseUpd......
  • [Oracle]索引
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18032039出自【进步*于辰的博客】参考笔记一,P25.27、P26.28、P30.2;笔记二,P69.5、P70/71。注:索引是一种数据结构(B树或B+树)。索引的“宏观”表现可以是“一棵树”,或者是树......
  • Oracle系列---【ORA-00257: Archiver error. Connect AS SYSDBA only until resolved
    ORA-00257:Archivererror.ConnectASSYSDBAonlyuntilresolved1.问题描述过了个周末,发现系统登录不上了,查看日志,发现报"ORA-00257:Archivererror.ConnectASSYSDBAonlyuntilresolved",明显数据库有问题了,我用客户端连,也报这个错误。2.问题分析经过一番查询,是因......
  • Oracle之SQL优化实战分析
    分享一个案例,一条SQL引发的“血案”!技术人人都可以磨炼,但处理问题的思路和角度各有不同,希望这篇文章可以抛砖引玉。以一个例子为切入点一、问题背景这是一个数据仓库系统,正常情况下每天0~6点会跑批,生成前一天的业务报表,供管理层分析使用。某天凌晨,监控系统频繁发出告警,大批业务报......
  • 基于docker的oracle12.2.0.1部署及oracle使用与docker镜像容器制作迁移方法
    基于docker的oracle12.2.0.1部署及oracle使用与docker镜像容器制作迁移方法本文介绍了基于docker的oracle12.2.0.1部署,包含了oracle基本配置、监听器和实例启动方法、PDB和CDB操作方法、表空间建立和用户数据库建立、常见启动问题解决等,并介绍了镜像制作、镜像打包、镜像迁移......
  • 成为MySQL DBA后,再看ORACLE数据库(五、内存管理)
    一、前言在数据库的体系结构中,内存区是非常关键的一部分,一般而言数据库实例也是由内存+后台进程组成。不同于MySQL的单进程多线程架构,ORACLE是多进程架构,所以在内存管理上也更加复杂。ORACLE的内存管理一般分两部分:PGA(ProgramGlobalArea)和SGA(SystemGlobalArea)。翻开当年学习O......
  • oracle数据库文件
    oracle数据库重要的文件包括参数文件,控制文件,数据文件,临时文件,重做日志文件。1参数文件oracle的参数文件可以设置数据库的名称,SGA和PGA的大小,控制文件的路径等系统参数。这些参数可以通过V$PARAMETER视图进行查询。oracle有两类参数文件,分别为pfile参数文件和spfile参数文件。o......
  • 【云原生进阶之数据库技术】第二章-Oracle-使用-3.3.2-Oracle Data Guard原理
    2DataGuard原理解析2.1数据同步原理        DG的核心组件包括:主数据库:负责处理所有的写操作,并将这些操作记录在重做日志(RedoLogs)中。备用数据库:可以是物理备用数据库(PhysicalStandby)或逻辑备用数据库(LogicalStandby)。物理备用数据库通常是只读的,而逻辑备用......
  • oracle数据库与oracle实例
    1oracle数据库分类1.1单租户数据库ORACLE12C之前的oracle数据库都是单租户数据库。单租户数据库是独立和完整的数据库,包括ORACLE的元数据和应用的数据。1.2容器数据库(CDB)根数据库只包含oracle的元数据,不存储应用数据。包含了一整套数据文件、参数文件、控制文件、重做日志......
  • 成为MySQL DBA后,再看ORACLE数据库(四、系统视图)
    在数据库的运维管理中,熟悉数据库系统视图的使用可以帮助我们了解数据库各方面的状态信息。一般数据库的系统视图分为数据字典视图和动态性能视图,数据字典视图用于显示数据库的元数据信息和系统状态信息包括各种数据库对象、用户、角色、权限等;动态性能视图用于显示数据库的性能统......