我有一个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编译错误。 *操作:
我对数据库很陌生,我想征求您的意见。感谢。
答案 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)
如果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排序;