Oracle Time Model Statistics(时间模型统计)

Oracle数据库从10g开始,启用以时间模型统计为主,命中率为辅等性能度量指标。基于时间模型统计,主要是基于操作类型测量在数据库中花费的时间的统计信息。最重要的时间模型统计是数据库时间,或DB时间。数据库时间表示在数据库调用中所花费的总时间,是实例工作负载量的总指示器。本文描述时间模型统计相关知识点。

一、 DB Time(数据库时间)与User Response Time(用户响应时间)

1、DB Time(数据库时间)

下图为 DB Time in Overall User Response Time

即所有花费在数据库层面调用时间的总和,包括所有会话(前台进程)以及非空闲等待,CPU时间等
如上图所示,从客户端Browser请求到客户端Browser响应,经历了很多个中间环节,DB Time仅仅是其中的一部分

2、User Response Time(用户响应时间)

下图为 DB Time in User Transaction

在上图各个部分的操作中:
用户向数据库发出请求,使用向下箭头所示。用于处理请求的数据库所花费的CPU时间和等待数据库等待的时间被认为是DB时间,由阴影区域表示一旦请求完成,结果将返回给用户,如上箭头所示。
上下箭头之间的空间代表处理请求的总用户响应时间,它包含除DB时间以外的其他组件。

  • 基于作者查询小说
    用户具基于特定的作者查询小说,此时产生应用程序完成基于作者的数据库查询操作。
  • 浏览查询结果
    当用户查看查询结果时,有一些额外的数据库查询会产生,如小说库存状态,用户浏览总量。
  • 添加商品到购物车
    在浏览了小说的细节后,用户决定将其中一部小说加入购物车。这会导致应用程序进行数据库调用来更新购物车。
  • 结算
    用户通过以前保存在站点的地址和以及新生成的付款信息,完成交易。这会导致应用程序执行各种数据库操作以检索用户信息,添加新订单,更新库存,并生成电子邮件确认。

二、AWR中的时间模型统计报告

Time Model Statistics                  DB/Inst: ORA11G/ora11g  Snaps: 551-553
-> Total time in database user-calls (DB Time): 1264.3s
-> Statistics including the word "background" measure background process
   time, and so do not contribute to the DB time statistic
-> Ordered by % or DB time desc, Statistic name
Statistic Name                                       Time (s) % of DB Time
------------------------------------------ ------------------ ------------
sql execute elapsed time                              1,188.0         94.0
DB CPU                                                  274.3         21.7
parse time elapsed                                       10.1           .8
connection management call elapsed time                   6.5           .5
PL/SQL execution elapsed time                             3.2           .3
hard parse elapsed time                                   2.9           .2
PL/SQL compilation elapsed time                           0.5           .0
hard parse (sharing criteria) elapsed time                0.4           .0
hard parse (bind mismatch) elapsed time                   0.1           .0
repeated bind elapsed time                                0.0           .0
failed parse elapsed time                                 0.0           .0
sequence load elapsed time                                0.0           .0
DB time                                               1,264.3
background elapsed time                                 857.8
background cpu time                                      25.4

三、时间模型统计重要组成部分说明

在Oracle数据库中,最重要的时间模型统计是DB Time和DB CPU。这两个统计数据直接显示数据库的工作量和描述整个数据库的响应时间。

  1. DB Time
    • 执行数据库用户级别调用所花费的时间(以微秒为单位)的量。这还不包括花在实例后台进程的时间,如PMON进程。DB Time测量时间实例启动后开始累积。由于DB时间是由所有非空闲用户会话的时间相结合来计算的,所以DB时间可能超过实例开始后所经过的实际时间。例如,已经运行了30分钟的实例可能有四个活动用户会话,其累积DB时间大约为120分钟。
  2. DB CPU
    • 在数据库用户级调用上花费的CPU时间(微秒)。
  3. connection management call elapsed time
    • 所有 Session 连接和断开连接所消耗的时间 .
  4. Sequence load elapsed time
    • 从数据字典获取下一个序列号所花费的时间。如果一个序列被缓存,那么花费的时间为当序列被用完补充缓存需要的时间。在cache中寻找新的sequence的时间是不计算在内。而对于non-cached 的情况,那么这个时间就是获取 nextval 的时间。
  5. SQL execute elapsed time
    • SQL statements 执行所花费的总的时间 , 注意对于 select 语句来说 . 这同样包括获取 (fetch) 查询结果的时间
  6. parse time elapsed
    • 解析 SQLStatements 的总共时间 , 它包括了软解析和硬解析 .
      6.1 hard parse elapsed time(硬解析所花费的总的时间)
      6.2 failed parse elapsed time(所有解析过程中遇到错误SQL 的解析所花费时间)
      6.3 hard parse (sharing criteria) elapsed time (当无法从 SQL Cache 中找到一个已经存在的 cursor 的时候 , 所有硬解析所花费的时间)
      6.4 hard parse (bind mismatch) elapsed time (当可以从 SQL Cache 找到一个已经存在的 curosr, 但是绑定变量不匹配的时候 , 所有硬解析花费的时间)
  7. PL/SQL execution elapsed time
    • 所有花在执行 PL/SQL interpreter 的时间 (PL/SQL interpreter - 就是 debug workspace), 但这不包括花在recursively executing/parsing SQL statements 上的时间,以及 recursively executing the Java VM 上的时间
  8. PL/SQL compilation elapsed time
    • 所有花在 PL/SQL compiler 上的时间 .
  9. inbound PL/SQL rpc elapsed time
    • 所有入站的远程调用所运行的时间(也就是说,从其他的instance通过数据链接到本数据库的调用),包括了所有SQL和Java的递归调用

四、基于时间模型统计调用脚本

1、查看用户CPU使用情况

SELECT   ss.username, se.SID, VALUE / 100 cpu_usage_seconds
FROM     v$session ss, v$sesstat se, v$statname sn
WHERE        se.STATISTIC# = sn.STATISTIC#
         AND NAME LIKE '%CPU used by this session%'
         AND se.SID = ss.SID
         AND ss.status = 'ACTIVE'
         AND ss.username IS NOT NULL
ORDER BY VALUE DESC;
USERNAME               SID CPU_USAGE_SECONDS
--------------- ---------- -----------------
SYSMAN                 156             77.69
DBSNMP                  66             25.86
SYS                    131               .06
DBSNMP                  66                 0
SYS                    131                 0

2、基于时间模型查询相关等待事件

COLUMN wait_class FORMAT a20
COLUMN name       FORMAT a30
COLUMN time_secs  FORMAT 999,999,999,999.99
COLUMN pct        FORMAT 99.99
SELECT   wait_class,
         NAME,
         ROUND (time_secs, 2) time_secs,
         ROUND (time_secs * 100 / SUM (time_secs) OVER (), 2) pct
FROM     (SELECT n.wait_class, e.event NAME, e.time_waited / 100 time_secs
          FROM   v$system_event e, v$event_name n
          WHERE      n.NAME = e.event
                 AND n.wait_class <> 'Idle'
                 AND time_waited > 0
          UNION
          SELECT 'CPU', 'server CPU', SUM (VALUE / 1000000) time_secs
          FROM   v$sys_time_model
          WHERE  stat_name IN ('background cpu time', 'DB CPU'))
ORDER BY time_secs DESC;
WAIT_CLASS           NAME                                     TIME_SECS    PCT
-------------------- ------------------------------ ------------------- ------
System I/O           control file parallel write               3,671.39  33.70
System I/O           db file async I/O submit                  1,832.96  16.82
CPU                  server CPU                                1,824.20  16.74
System I/O           log file parallel write                   1,396.98  12.82
Commit               log file sync                               936.36   8.59
User I/O             direct path write                           570.01   5.23
Concurrency          os thread startup                           138.38   1.27
Configuration        log file switch (checkpoint in              120.05   1.10
                     complete)

五、相关视图数据字典

V$SYS_TIME_MODEL
V$SESS_TIME_MODEL
DBA_HIST_SYS_TIME_MODEL

时间: 2024-09-20 12:29:49

Oracle Time Model Statistics(时间模型统计)的相关文章

mysql按时间分段统计数据

问题描述 mysql按时间分段统计数据 表结构:+----------------+--------------+| time | num |+----------------+--------------+| 1256278360 | 10000000 || 1256278370 | 10000000 || 1256278380 | 10000000 || 1256278390 | 10000000 || 1256278480 | 10000000 || 1256278490 | 100000

sql server-SQLServer 中如何按一定间隔时间分组统计时间段内出现次数

问题描述 SQLServer 中如何按一定间隔时间分组统计时间段内出现次数 我的原始数据是这样的 |ID |time |Status |215CSZ00 |2015/11/30 23:53:41 |2 |21CUG0HB |2015/11/30 23:54:17 |1 |21CUG0HB |2015/11/30 23:54:22 |1 |21UA75CS |2015/11/30 23:54:54 |1 |215CSZ00 |2015/11/30 23:56:17 |2 |21ZCYPUY |20

一个能对访问者进行编号、记录访问次数、IP、时间的统计制作实例_应用技巧

一个能对访问者进行编号.记录访问次数.IP.时间的统计制作实例  我做了一个网站,www.zydn.net  当然啦,跟大家一样,也摆了个计数器在上面,每天看计数器都在不断的翻,心里很高兴,不过后来我又想,到底是谁看了我的网站啊?是新朋友还是老朋友啊?也不知他们来了多少次,我还想给他们都编上号,于是我申请了 免费统计,不过一连换了N个都不满意,唉,看来,只有自己动手才能丰衣足食了,说干就干,水平臭臭,还望高手笑话之于,不访指教.  我以ACCESS库为例子,其实用SQL SERVER库也只要改一

Oracle并发(CONCURREMT)收集统计信息 (文档 ID 1555451.1)

 Oracle并发(CONCURREMT)收集统计信息 (文档 ID 1555451.1)   >                    >    >  >      >  >      >                          >   >>             >>>>>> >>>>>> >> > >>>>>&

Oracle的奇葩设置之自动统计信息更新

    目前,oracle数据库版本已经到达12C了,数据库SQL的执行基本都是基于CBO开销模式的.但是,对于应用维护人员不尽理解数据库的工作原理,他们为了最求数据库的高性能,创建完数据库,却禁用了数据库统计信息自动更新的JOB.在联通,通过如下方法查看,发现很多数据库的统计信息更新作业都被禁用了. SQL> select owner,job_name,enabled from dba_scheduler_jobs where job_name='GATHER_STATS_JOB'; OWNE

oracle 求两个时间点直接的分钟、小时数

select sum(ceil((gdr.enddt - gdr.startdt) * 24)) h, sum(ceil((gdr.enddt - gdr.startdt) * 24 * 60)) m, sum(ceil((gdr.enddt - gdr.startdt) * 24 * 60 * 60)) s from gat_data_record gdr where gdr.enddt between to_date('2011-1-1','yyyy-mm-dd') and to_date(

从oracle 数据库读取日期时间,并在网页上打印万年历

oracle|打印|数据|数据库|网页 在core Java 那本书里,在讲类之前就将了一个打印一个月份中每天是星期几的万年历程序.最近写程序的时候终于要用到了.我花费了半天时间终于弄明白了GregorianCalendar类,并且通过网络抓取oracle数据的时间,然后显示在JSP 网页上. 运行效果如下: 首先要在J2se里面写出万年历程序,作为练习: 1)星期日Calendar.SUNDAY =1  星期日为1,那么星期几就+1为以此类推! 打印月历的程序: package moonsof

Oracle中如何对时间进行简单加减运算

今天有朋友问,如果对时间进行运算,比如对一个时间值加3分钟,或者对一个时间减去1秒. 以下测试简单说明了这类运算的使用方式: SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; Session altered. SQL> select sysdate, sysdate+1/24, sysdate +1/1440, sysdate + 1/86400 from dual; SYSDATE            SYSDA

Oracle技术:基于时间点的表空间恢复

TSPITR(表空间时间点恢复)用于将一个或多个表空间恢复到过去某个时间点的状态,而其他表空间仍然保持现有状态. TSPITR 相关的概念和术语: (1) TSPITR (Tablespace Point-In-Time Recover).TSPITR 是表空间时间点恢复的英文缩写格式,它表示将一个或多个表空间恢复到过去时间点的状态,而其他 表空间仍然保持现有状态. (2) TSPITR 实现方法.当实现表空间时间点恢复时,既可以使用用户管理的表空间时间点恢复方法,也可以使用RMAN 管理的表空