gpt4 book ai didi

performance - pl/sql存储过程…执行时间在哪里?

转载 作者:行者123 更新时间:2023-12-04 21:57:55 25 4
gpt4 key购买 nike

我目前正在跟踪存储过程中的性能泄漏。
在最初的“开始”之后放一个时间戳,而在最后的“结束”之前放一个时间戳(我之前正在做一次提交),说该过程很麻烦。 10秒完成。
但是,我必须等待2分钟以上才能结束。

谁能告诉我其余时间在哪里?我正在使用Oracle SQL dev,但在其余时间中似乎并没有空闲,该过程似乎在各自的表上保持了锁:(

非常感谢您的启发。

编辑:再次感谢您的输入:)
这是该过程的剥离代码,具体取决于要处理的项目数,第1部分当前为abt。 10至40秒,第二节几毫秒。但是,该过程需要2到8分钟才能运行。
同样,包含要删除的数据的表似乎比所需的锁定时间更长,从而导致插入延迟。
按计划的作业启动它并没有区别,行为相同。

create or replace
procedure MY_PROCEDURE is
start_procedure number;
start_delete number;
end_procedure number;
begin

start_procedure :=dbms_utility.get_time;

begin
-- stripped: doing some selects/updates here
end;
commit;

start_delete :=dbms_utility.get_time ;

begin
-- stripped: cleanig up some other data here
end;
commit;
end_procedure :=dbms_utility.get_time ;

dbms_output.put_line('procedure took: '||to_char((end_procedure- start_procedure)/1000));
dbms_output.put_line('updates took: '||to_char((start_delete- start_procedure)/1000));
dbms_output.put_line('delete took: '||to_char((end_procedure-start_delete)/1000));

end;

最佳答案

如果用诸如以下消息替换对dbms_utility.get_time的调用:

dbms_output.put_line ('start procedure: ' || to_char(sysdate, HH24:MI:SS'));


然后像这样调用过程:

dbms_output.put_line ('before procedure: ' || to_char(sysdate, HH24:MI:SS'));
exec my_procedure;
dbms_output.put_line ('after procedure: ' || to_char(sysdate, HH24:MI:SS'));


那么就会出现错过时间的地方。

关于performance - pl/sql存储过程…执行时间在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1050180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com