DBMS_UTILITY.GET_TIME与DBMS_UTILITY.GET_CPU_TIME比较


原文链接:
http://www.oracle-developer.net/display.php?id=307






一直以来开发人员都熟悉DBMS_UTILITY.GET_TIME函数。常用语测试一个程序中2个时间点的间隔,即程序耗时。
到了10g,oracle又增加一个DBMS_UTILITY.GET_CPU_TIME函数。这个新函数用于测量2个时间点使用的CPU时间。
下面咱们通过例子证明以下2个函数的区别:

例1:一个计算密集(cpu-bound)型例子


这个例子没有I/O。这一点强调了CPU密集操作,这种情况下GET_TIME和GET_CPU_TIME函数将返回几乎一致的耗时。

DECLARE
b1 PLS_INTEGER;
b2 PLS_INTEGER;
e1 PLS_INTEGER;
e2 PLS_INTEGER;
n PLS_INTEGER := 0;
BEGIN
b1 := DBMS_UTILITY.GET_TIME();
b2 := DBMS_UTILITY.GET_CPU_TIME();
FOR i IN 1 .. 100000000 LOOP
--NULL;
n := n + 1;
END LOOP;
e1 := DBMS_UTILITY.GET_TIME() - b1;
e2 := DBMS_UTILITY.GET_CPU_TIME() - b2;
DBMS_OUTPUT.PUT_LINE( 'GET_TIME elapsed = ' || e1 || ' hsecs.' );
DBMS_OUTPUT.PUT_LINE( 'GET_CPU_TIME elapsed = ' || e2 || ' hsecs.' );
END;

GET_TIME elapsed = 175 hsecs.

GET_CPU_TIME elapsed = 174 hsecs.





PL/SQL 过程已成功完成。









例2:I/O密集(I/O-bound)型例子





这个例子对于PLSQL程序来讲更具有代表性。这种情况下我们会看到2个函数耗时将截然不同。

DECLARE

   b1 PLS_INTEGER;
b2 PLS_INTEGER;
e1 PLS_INTEGER;
e2 PLS_INTEGER; BEGIN b1 := DBMS_UTILITY.GET_TIME();
b2 := DBMS_UTILITY.GET_CPU_TIME(); FOR r IN ( SELECT * FROM all_source ) LOOP
NULL;
END LOOP; e1 := DBMS_UTILITY.GET_TIME() - b1;
e2 := DBMS_UTILITY.GET_CPU_TIME() - b2; DBMS_OUTPUT.PUT_LINE( 'GET_TIME elapsed = ' || e1 || ' hsecs.' );
DBMS_OUTPUT.PUT_LINE( 'GET_CPU_TIME elapsed = ' || e2 || ' hsecs.' ); END;
/

GET_TIME elapsed = 324 hsecs.

GET_CPU_TIME elapsed = 273 hsecs.

PL/SQL 过程已成功完成。

-------------------------------------------

Dylan    Presents.

Oracle DBMS_UTILITY.GET_TIME与DBMS_UTILITY.GET_CPU_TIME区别的更多相关文章

  1. oracle中函数和存储过程的区别和联系【转载竹沥半夏】

    oracle中函数和存储过程的区别和联系[转载竹沥半夏] 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己 ...

  2. oracle中rownum和rowid的区别

    rownum和rowid的区别总括: rownum和rowid都是伪列,但是两者的根本是不同的. rownum是根据sql查询出的结果给每行分配一个逻辑编号,所以你的sql不同也就会导致最终rownu ...

  3. oracle函数和存储过程有什么区别

    oracle函数和存储过程有什么区别 1. 返回值的区别,函数有1个返回值,而存储过程是通过参数返回的,可以有多个或者没有 2.调用的区别,函数可以在查询语句中直接调用,而存储过程必须单独调用. 函数 ...

  4. oracle中rownum和rowid的区别【转】

    rownum和rowid的区别总括: rownum和rowid都是伪列,但是两者的根本是不同的. rownum是根据sql查询出的结果给每行分配一个逻辑编号,所以你的sql不同也就会导致最终rownu ...

  5. oracle中函数和存储过程的区别和联系

    oracle中函数和存储过程的区别和联系 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己总结的关于函数和 ...

  6. Oracle语句中IN和=的区别有哪些?

    Oracle语句中IN和=的区别有: 1.首先应用范围不一样:in 可以理解为是范围内的选择:= 只有一个.例如: select sno, sname from t1 where sno in ('s ...

  7. Oracle和MySql的分页查询区别和PL/SQL的基本概念

    Oracle和MySql的分页查询区别:     Oracle的分析查询,之前Oracle的分页是使用伪列 ROWNUM 结合子查询实现,mysql的分页更简单,直接使用 LIMIT 关键字就可以实现 ...

  8. [转帖]Oracle dba_objects和all_objects 最大的区别

    Oracle dba_objects和all_objects 最大的区别 原创 Oracle 作者:maohaiqing0304 时间:2015-08-14 15:07:18  9281  0   链 ...

  9. oracle跟SQL Server 2005 的区别

    Oracle与Sql server的区别   一直搞不明白Oracle数据库和sql server的区别,今天我特意查资料把他们的区别整理出来 Oracle数据库:Oracle Database,又名 ...

  10. oracle中row_number和rownum的区别和联系(翻译)

    http://www.tuicool.com/articles/bI3IBv 附问题:有以下一个SQL语句: SELECT * FROM ( SELECT t.*, row_number() OVER ...

随机推荐

  1. [转帖]金仓数据库KWR使用说明

    金仓数据库KWR使用说明 1.KWR性能报告介绍 2.部署KWR性能报告功能 2.1.修改配置文件 2.2.使配置文件中参数生效 2.3.创建KWR扩展 3.使用KWR快照功能 3.1.创建KWR快照 ...

  2. STM32CubeMX教程24 WDG - 独立窗口看门狗

    1.准备材料 开发板(正点原子stm32f407探索者开发板V2.4) STM32CubeMX软件(Version 6.10.0) 野火DAP仿真器 keil µVision5 IDE(MDK-Arm ...

  3. 使用yagmail发送邮件

    一.yagmail基本数据准备 1.终端下载yagmail:pip install yagmail 2.获取SMTP和密钥 我们以新浪邮箱为例,登录成功后进入设置页面,点击客户端pop/imap/sm ...

  4. It is currently in use by another Gradle instance

    FAILURE: Build failed with an exception. * What went wrong: Could not create service of type TaskHis ...

  5. elemetui-中在input框中回车

    在input框中回车 <el-input @keyup.enter.native="gotoLogin" class="my-el-input" plac ...

  6. c#通过表达式树优雅的实现分组取TopN笔记

    需要引入nuget包来实现ef.functions调用row_number Thinktecture.EntityFrameworkCore.SqlServer 调用方式: //顺排 context. ...

  7. 数字预失真(DPD)小试

    前言 射频功放的增益响应并非线性的,受到放大管饱和效应的影响,功放不可避免地出现非线性.甚至具有记忆效应的失真.这种非线性失真不仅产生高阶谐波,还会产生互调干扰,降低带内信噪比,影响带外信号.因此,需 ...

  8. springboot security 权限控制 -- @PreAuthorize 的使用

    1. 说明 security 鉴权方式常用的有两种配置,1.配置文件中配置:2.使用注解标注:他们都是基于 acess 表达式,如果需要自定义逻辑的鉴权认证,只需要自定义 access 表达式即可.本 ...

  9. 物色到的 c# 模拟 http post get 请求 做下笔记

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...

  10. 移动端跨平台动效工具Lottie, PAG的使用

    动效工具Lottie   Lottie 是 Airbnb 开源的一套跨平台的完整的动画效果解决方案,设计师可以使用 Adobe After Effects 设计出漂亮的动画之后,使用 Lottic 提 ...