DBMS_UTILITY.GET_CPU_TIME和DBMS_UTILITY.GET_TIME


1.计算密集型(cpu-bound)

DECLARE

  N  PLS_INTEGER := 0;

  A1 PLS_INTEGER;

  A2 PLS_INTEGER;

  A3 PLS_INTEGER;

  A4 PLS_INTEGER;

BEGIN

  A1 := DBMS_UTILITY.GET_CPU_TIME;

  A3 := DBMS_UTILITY.GET_TIME;

  FOR I IN 1 .. 100000000 LOOP

    N := N + 1;

  END LOOP;

  A2 := DBMS_UTILITY.GET_CPU_TIME;

  A4 := DBMS_UTILITY.GET_TIME;

  DBMS_OUTPUT.PUT_LINE(A2 - A1);

  DBMS_OUTPUT.PUT_LINE(A4 - A3);

END;

输出:

GET_CPU_TIME:123
GET_TIME:124

2.I/O密集型

DECLARE

  N  PLS_INTEGER := 0;

  A1 PLS_INTEGER;

  A2 PLS_INTEGER;

  A3 PLS_INTEGER;

  A4 PLS_INTEGER;

BEGIN

  A1 := DBMS_UTILITY.GET_CPU_TIME;

  A3 := DBMS_UTILITY.GET_TIME;

  FOR I IN (SELECT * FROM all_source) LOOP

    NULL;

  END LOOP;

  A2 := DBMS_UTILITY.GET_CPU_TIME;

  A4 := DBMS_UTILITY.GET_TIME;

  DBMS_OUTPUT.PUT_LINE('GET_CPU_TIME:' || (A2 - A1));

  DBMS_OUTPUT.PUT_LINE('GET_TIME:' || (A4 - A3));

END;

输出:

GET_CPU_TIME:147
GET_TIME:169

DBMS_UTILITY.GET_TIME 为总消耗时间.

DBMS_UTILITY.GET_CPU_TIME为使用的cpu时间,在cpu密集操作时,两者的结果几乎一致.

两者返回的时间单位均为百分之一秒


:1)pls_integer类型也是数字类型,但和number类型不同,number可以存储实数,而pls_integer只能存储-2147483647到+2147483647之间的整数,如果使用pls_integer类型时发生溢出,系统将会报错。
        2)binary_integer与pls_integer类似,在9.2版本以前大量使用,从9.2以后,从Oracle内部一些组件可以看的出,大有被pls_integer取代之势(pls_integer比binary_integer具有更少的存储开销和更好的访问性能,所以Oracle从9.2以后推荐你尽量能使用pls_integer就使用pls_integer)。它也是只能存储-2147483647到+2147483647之间的整数。
        3)在oracle 11g中,又增加了一个新的类似的数据类型simple_integer,不过simple_integer不能包含空值,它的取值范围是[-2147483648..2147483647]。在11g中,simple_integer相对pls_integer在性能上又有所提高,如果在实际的pl/sql中既不需要overflow检查也不会包含null值,Oracle建议你使用simple_integer.


你可能感兴趣的:(DBMS_UTILITY.GET_CPU_TIME和DBMS_UTILITY.GET_TIME)