Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance dbms_output.put_行_Performance_Oracle_Plsql_Dbms Output - Fatal编程技术网

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;