oracle测量执行时间

时间:2016-10-21 14:30:10

标签: sql database oracle

我有一个oracle数据库和一些在SQL中作为脚本编写的查询。我想测量每个查询的执行时间,所以我在互联网上找到了这部分代码:

DECLARE
  t1 NUMBER;
  t2 NUMBER;
BEGIN
  t1 := DBMS_UTILITY.GET_TIME;
  -- MY QUERY
  t2 := DBMS_UTILITY.GET_TIME;
  DBMS_OUTPUT.PUT_LINE(t2 - t1);
END;

作为我的查询'我只想写:

@directory\script.sql

但它给了我一个错误。

  

错误报告:ORA-06550:linia 8,kolumna 1:PLS-00103:遇到   符号" @"当期待以下之一时:   (开始情况声明结束异常退出goto if loop mod null pragma raise return select update with<<< continue close current   delete fetch lock insert open rollback savepoint set sql execute   commit forall merge pipe purge 06550. 00000 - " line%s,column   %S:\ N%S" *原因:通常是PL / SQL编译错误。 *操作:

我对数据库很陌生,我想征求您的意见。感谢。

1 个答案:

答案 0 :(得分:0)

如果你想找到你的sql的执行时间,只需获取SQL_ID并运行以下查询(当你运行它时它必须在缓存中。如果你有诊断包,我可以给你历史此查询的版本以查看趋势)。

1)打开实例的2个会话
2)对于会话1 - 获取会话标识符
a)从v $ mystat中选择不同的sid 3)对于会话1 - 发出您希望运行的SQL

4)对于会话2 - 获取第一个会话的sql_id
  a)从v $ session中选择sql_id,prev_sql_id,其中sid = #####
其中####是(2)

中的sid

如果sql_id为null,则使用prev_sql_id,否则,使用上面的sql_id并插入下面:

设置linesize 300
列outline_sid格式a8
列outline_category格式a30
列sql_profile格式a40
栏子格式999
break on inst_id在sql_id上跳过1跳过1

选择不同的
       sa.inst_id,
       sa.sql_id,
       sa.child_number孩子,
       sa.parsing_schema_name,
       sa.plan_hash_value“HASH”,
       sa.outline_category,
       sa.sql_profile,
       sa.sql_plan_baseline,
       sa.users_executing,
       sa.executions“EXEC”,
       sa.buffer_gets / decode(sa.executions,0,1,sa.executions)“LOG_PER”,

       sa.disk_reads / decode(sa.executions,0,1,sa.executions)“PHY_PER”,

       round((sa.elapsed_time / decode(sa.executions,0,1,sa.executions))/ 1000000,6)“elapsedPer”
来自gv $ sql sa
其中sa.sql_id ='& sqlid'
按1排序;