Oracle DBMS_UTILITY.GET_TIME与DBMS_UTILITY.GET_CPU_TIME区别

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.

时间: 2024-10-13 22:32:44

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

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

oracle中函数和存储过程的区别和联系[转载竹沥半夏] 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己总结的关于函数和存储过程的区别. 一.存储过程 1.定义 存储过程是存储在数据库中提供所有用户程序调用的子程序,定义存储过程的关键字为procedure. 2.创建存储过程 create [or replace] procedure 存储过程名 [(参数1 类型,参数2 out 类型……)] as

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

oracle中函数和存储过程的区别和联系 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己总结的关于函数和存储过程的区别. 一.存储过程 1.定义 存储过程是存储在数据库中提供所有用户程序调用的子程序,定义存储过程的关键字为procedure. 2.创建存储过程 create [or replace] procedure 存储过程名 [(参数1 类型,参数2 out 类型……)] as 变量名 类型:

oracle中union和union all区别与性能分析

[ 概要 ] 经常写sql的同学可能会用到union和union all这两个关键词, 可能你知道使用它们可以将两个查询的结果集进行合并, 那么二者有什么区别呢? 下面我们就简单的分析下. [ 比较 ] union: 对两个结果集进行并集操作, 不包括重复行,相当于distinct, 同时进行默认规则的排序; union all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不管是不是重复; 下面我们举一个简单的例子来证明上面的结论: 1. 准备数据: drop table

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

1. 返回值的区别,函数有1个返回值,而存储过程是通过参数返回的,可以有多个或者没有 2.调用的区别,函数可以在查询语句中直接调用,而存储过程必须单独调用. 函数一般情况下是用来计算并返回一个计算结果而存储过程一般是用来完成特定的数据操作(比如修改.插入数据库表或执行某些DDL语句等等) 参数的返回情况来看: 如果返回多个参数值最好使用存储过程,如果只有一个返回值的话可以使用函数: 从调用情况来看: 如果在SQL语句(DML或SELECT)中调用的话一定是存储函数或存储的封装函数不可以是存储过程

Oracle 中UNDO与REDO的区别详解

    学习设计模式已经有段时间了,初接触设计模式,尽管例子简单.生动,但还是感觉很是抽象.今天又学习了设计模式中的装饰模式,也就是装饰模式让自己对模式略有所懂,装饰模式最大的特点就是把所有需要的功能都按正确的顺序串联起来进行控制.这里需要强调的是"顺序",也就是说这种装饰是建立在一定的顺序之上的,而且这种顺序是由人为控制的:不同于建造者模式,它的顺序是固定不变的. **概念     动态地给一个对象添加一些额外的职责,就增加的功能来说,装饰模式比生成子类更为灵活. **结构图    

Oracle中function和procedure的区别

Oracle中function和procedure的区别: 1). 可以理解函数是存储过程的一种 2). 函数可以没有参数,但是一定需要一个返回值,存储过程可以没有参数,不需要返回值 3). 函数return返回值没有返回参数模式,存储过程通过out参数返回值, 如果需要返回多个参数则建议使用存储过程 4). 在sql数据操纵语句中只能调用函数而不能调用存储过程 原文地址:https://www.cnblogs.com/Xbingbing/p/8870575.html

Oracle游标和游标变量的区别

oracle游标我们经常用到,下面介绍oracle游标和游标变量的区别. oracle游标是数据库中一个命名的工作区,当游标被声明后,他就与一个固定的SQL想关联,在编译时刻是已知的,是静态的,它永远指向一个相同的查询工作区. 游标变量可以在运行时刻与不同的SQL语句关联,在运行时可以取不同的SQL语句.它可以引用不同的工作区. oracle游标和游标变量是不能相互代替的. 如何定义游标类型: type ref_type_name is ref cursor [RETURN return_typ

Oracle学习(八)之 Oracle数据库启动历代版本及其区别

1.Oracle 的OCI Driver 和 Thin Driver的区别 ①JDBC OCI: oci是oracle call interface的缩写,此驱动类似于传统的ODBC 驱动.因为它需要Oracle Call Interface and Net8,所以它需要在运行使用此驱动的JAVA程序的机器上安装客户端软件,其实主要是用到orcale客户端里以dll方式提供的oci和服务器配 置. ②JDBC Thin: thin是for thin client的意思,这种驱动一般用在运行在WE

Oracle not in和not exists区别

转自:[ORACLE]详解not in与not exists的区别与用法(not in的性能并不差!) 可以看到,使用not exists需要0.06秒,而使用not in需要21秒,差了3个数量级!为什么呢?其实答案很简答,以上两个SQL其实并不是等价的. 我把以上两个表的数据清除掉,重新插入数据: truncate table ljn_test1; truncate table ljn_test2; insert into ljn_test1 values(1); insert into l