Performance dbms_output.put_行
是的,这是另一段需要执行的代码,但除非实际打开输出,否则我认为开销非常小Performance dbms_output.put_行,performance,oracle,plsql,dbms-output,Performance,Oracle,Plsql,Dbms Output,是的,这是另一段需要执行的代码,但除非实际打开输出,否则我认为开销非常小 这里有一个更详细的AskTom问题:这取决于调用dbms\u输出的次数。put\u line与PL/SQL中的其他操作相比。每多行代码都会降低代码的性能。毕竟,这是一条要执行的额外指令,它至少会消耗一些CPU。是的,dbms_output.put_行会降低性能 真正的问题是:这一额外代码行的好处是否超过了性能损失?只有你能回答这个问题 问候, Rob.我使用日志表而不是dbms\u输出。确保设置为自治事务,例如(当然,根据
这里有一个更详细的AskTom问题:这取决于调用
dbms\u输出的次数。put\u line
与PL/SQL中的其他操作相比。每多行代码都会降低代码的性能。毕竟,这是一条要执行的额外指令,它至少会消耗一些CPU。是的,dbms_output.put_行会降低性能
真正的问题是:这一额外代码行的好处是否超过了性能损失?只有你能回答这个问题
问候,Rob.我使用日志表而不是dbms\u输出。确保设置为自治事务,例如(当然,根据您的需要进行修改): 当然,请确保您创建了日志表。在代码中,如果在一个循环中执行多个操作,则可能希望每个x num操作只记录一次日志,例如:
create or replace myProcedure as
cursor some_cursor is
select * from someTable;
v_ctr pls_integer := 0;
begin
for rec in some_cursor
loop
v_ctr := v_ctr + 1;
-- do something interesting
if (mod(v_ctr, 1000) = 0) then
somePackage.ins_log('Inserted ' || v_ctr || ' records',
'Log',
i_msg_context=>'myProcedure');
end if;
end loop;
commit;
exception
when others then
somePackage.ins_log(SQLERRM, 'Err', i_msg_context=>'myProcedure');
rollback;
raise;
end;
请注意,自治事务将确保插入日志stmt,即使发生错误并回滚所有其他事务(因为它是一个单独的事务)
希望这有帮助…比dbms_output;)好得多 如果使用适当的选项编译过程,则可以查看DBMS_OUTPUT.PUT_行,使其仅位于预解析代码中
一个问题是,是否调用了DBMS_OUTPUT.ENABLE。
如果是这样,DBMS_OUTPUT.PUT_行中的任何值都将记录在会话的内存结构中。如果您继续将内容推到内存中,而从不将其取出(某些应用程序服务器连接可能就是这种情况),您可能会发现,几天后,内存中就有很多内容。这通常是一个很好的解决方案,但由于原始海报担心开销,这可能会更糟。与调用
dbms\u output.put\u line
相比,自治事务的处理时间要长得多。您真的不希望在生产代码中有一堆dbms\u output.put\u行。对于进入任何循环的代码都是如此;)另一个重要因素是使用什么类型的表达式为其构建参数,例如dbms\u output.put\u line(my\u slow\u function())
create or replace myProcedure as
cursor some_cursor is
select * from someTable;
v_ctr pls_integer := 0;
begin
for rec in some_cursor
loop
v_ctr := v_ctr + 1;
-- do something interesting
if (mod(v_ctr, 1000) = 0) then
somePackage.ins_log('Inserted ' || v_ctr || ' records',
'Log',
i_msg_context=>'myProcedure');
end if;
end loop;
commit;
exception
when others then
somePackage.ins_log(SQLERRM, 'Err', i_msg_context=>'myProcedure');
rollback;
raise;
end;