方法一:
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,取决于实际需求。