计算一条SQL语句执行时间

方法一:

CREATETABLE JMSJ1(typevarchar2(100),A intervaldaytosecond);

select*from JMSJ1;

declare

  start_date timestamp:=sysdate;

  end_date   timestamp:=sysdate;

  trip_length intervaldaytosecond;

begin

  start_date :=systimestamp;

  INSERTINTO TESTTABLE10W_BF6

    SELECT*FROM TESTTABLE10W_BF4;

  end_date   :=systimestamp;

  trip_length := end_date - start_date;

  INSERTINTO JMSJ1 VALUES('jiamiqijian', trip_length);

 dbms_output.put_line(start_date ||', '|| end_date);

 dbms_output.put_line('jmsj:'|| trip_length);

  commit;

end;


方法二:查询Oracle自带的v$sql视图

select sql_text, elapsed_time/1000000,FIRST_LOAD_TIME

  from v$sql orderby3desc

方法三: spool

比较2个sql执行时间

spool off

php]

SQL> set timi on

SQL> set termout off

SQL> spool c:\test.sql

Started spooling to c:\test.sql

SQL> select * from emp whererownum<=5;

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO

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

7369 SMITH      CLERK     7902 1980-12-17     800.00               20

7499 ALLEN      SALESMAN  7698 1981-2-20     1600.00    300.00    30

7521 WARD       SALESMAN   7698 1981-2-22     1250.00   500.00     30

7566 JONES      MANAGER   7839 1981-4-2      2975.00               20

7654 MARTIN     SALESMAN  7698 1981-9-28     1250.00   1400.00    30

SQL> spool off

Stopped spooling to c:\test.sql

SQL> @c:\test1.sql

SQL> spool off

SQL> set termout on

SQL> @c:\test1.sql

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO

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

7369 SMITH      CLERK     7902 1980-12-17     800.00               20

7499 ALLEN      SALESMAN  7698 1981-2-20     1600.00    300.00    30

7521 WARD       SALESMAN   7698 1981-2-22     1250.00   500.00     30

7566 JONES      MANAGER   7839 1981-4-2      2975.00               20

7654 MARTIN     SALESMAN  7698 1981-9-28     1250.00   1400.00    30

 

SQL> spool off

SQL>

select sql_text,elapsed_time/1000000,FIRST_LOAD_TIME

 from v$sql order by 3 desc

 where sql_text like 'select * from scott.emp';

 

select v.sql_id,

v.child_number,

v.sql_text,

v.elapsed_time,

v.cpu_time,

v.disk_reads

from v$sql v

SQL> selectELAPSED_TIME/1000,executions,sql_text from v$sql where sql_text like '%dba_objects%';

ELAPSED_TIME/1000 EXECUTIONS SQL_TEXT

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

 3879.964 3 selectELAPSED_TIME/1000,executions,sql_text from v$sql where sql_text like '%db

 a_objects%'

 3943.843 1 select * from v$sql where sql_textlike '%dba_objects%'

事情因为本来是想查下执行时间最长的sql语句,觉得ELAPSED_TIME是执行时间(单位微秒),而executions为执行次数,所以相除肯定就是单条sql的执行时间了。

而在V$SQL中elapsed_time 代表了执行完毕的时间 , 也就是响应时间,responsetime,

而cpu_time 代表了执行时消耗的CPU 时间,也就是计算时间,服务时间,service time

所以

elapsed_time = cpu_time + wait_time

有时候可以通过这两个值的差来衡量这个SQL的wait Time.

当然,有时候可能关心elapsed_time ,有时候则关心cpu_time ,也有时候关心wait Time,取决于实际需求。


你可能感兴趣的:(Oracle)