存储过程运行时间
A. 如何查询存储过程开始执行时间和结束时间
需要在存储过程中定义的时候把开始执行时间和结束时间打印出来。
举例如下:
创建存储过程:
createorreplaceprocerep_testasv_begintimevarchar2(20);v_endtimevarchar2(20);v_strvarchar2(10);beginv_begintime:=to_char(sysdate,'yyyy-mm-ddhh24:mi:ss');select'badkano'intov_strfromal;v_endtime:=to_char(sysdate,'yyyy-mm-ddhh24:mi:ss');dbms_output.put_line('开始时间为:'||v_begintime);dbms_output.put_line('结束时间为:'||v_endtime);end;end;执行存储过程:
beginp_test;end;
执行结果:
说明:由于样例存储过程过于简单,但在进行过多数据处理的时候,看到的结果会比较明显。
B. oracle中怎么用存储过程将的存储过程的执行时间返回出去。
可以在日志表中加一个运行时间字段,可以在程序运行之前设定一定变量值为sysdate,程序运行结尾出一个变量2 sysdate , 两个变量相减就可以得到过程运行时间.
begin
v_date1:= sysdate;
...
v_date2:=sysdate;
v_run_num=v_date2-v_dat1;
insert into 日志表(run_num_time) values(v_run_num);
commit;
C. 在sql存储过程中Print如何来设置时间
如果是判断存储过程的运行时间,那么你@BeginTime2应该是在运行开始时,赋为当前日期值,在存储过程最后打印,实际基本可以判断出运行的分钟数了吧。
日期类型需要转换为字符串才能和字符串拼接
Convert(varchar(20),getdate(),20) 是日期转换字符串的转换函数其中最后的20是字符串格式化参数,比如Convert(varchar(20),getdate(),113),Convert(varchar(20),getdate(),120)都可以转换为不同格式的日期显示格式
Cast是强制类型转换,在这里是将int类型转换为字符串,使用方式举例:cast (123 as varchar) ,cast('2434' as int) 具体可以看看SQL帮助(查询分析器按F1)
Datediff是日期比较函数, 其中mi指两个时间的分钟差额,返回的是int类型,如果要拼到字符串中,也需要转换为字符串.datediff还可以判断相差的天数:
datediff(dd,'2010-12-25',getdate()) 年数、秒数等等,具体可以参考帮助和自己动手实验了。
D. sql存储过程耗时太长
多长都有可能,40是很正常的。
1.尽量优化语句,尽量少用游标。
2.修改较为常用的表要注意,最好先在临时表中作好运算和其它处理,最后在修改这些表,以免较慢的存储过程长时间锁定表记录,影响数据正常使用。
3.将连接超时和命令超时适当扩大,以免超时错误。
E. 存储过程第一次执行耗时30分钟,第二次开始每次耗时不到3分钟,这是什么原因
sql是高级语言,数据库系统执行sql之前要将sql语句进行解析(相当于编译),这个过程叫硬解析;数据库系统每次执行sql之前都会检查共享池中是不是存在已经解析过的语句,如果有就拿来直接用,这叫软结息。软解析比硬解析效率高,这是影响因素之一;
二、第一次执行可能没有走索引,第二次执行使用第一次执行的执行计划
三、看你的存储过程做了些什么,有可能第一次把活干完了,导致第二次执行没什么活干
以上回答基于oracle体系结构
F. 怎么查询某一存储过程最近一次执行时间
MSSQL:
1
2
3
declare @dt as datetime
set @dt=getdate()
--@dt就是当前SQL服务器时间
Oracle:
1
SYSDATE()