2012-06-01 49 views
1

我想弄清楚为什么插入和更新语句需要更长的时间在生产服务器上运行而不是测试服务器。我不知道如何去监控在SQL Developer中运行的块的状态。在插入这么多行之后,像rownum plus sysdate的输出就是一个好的开始。如何监视一个plsql块语句

有没有一种方法可以在块运行时输出dbms_output.put_line语句?

我目前在Oracle 11g上运行SQL Developer 3.1.07。

编辑补充SOLUTION:后的PL/SQL块已经被执行,以便它们不适合而代码运行查明问题

PROCEDURE log_timestamp (
    PI_trans_num number 
) IS 
    PRAGMA AUTONOMOUS_TRANSACTION; 
BEGIN 
    INSERT INTO timestamp_log (log_timestamp, trans_num) 
    VALUES (SYSTIMESTAMP, PI_trans_num); 
    COMMIT; 
END log_timestamp; 

回答

1

dbms_output.put_line语句仅被显示。

如果您想跟踪长时间运行的进程,您可以使用自主事务(因此您不会干扰当前事务)登录到数据库表并监视日志记录表。

采取另一种方法,您可以查看正在测试服务器和生产服务器上运行的插入和更新语句的解释计划。这可能会识别生产系统上的差异,这将解释时间差异。

+0

感谢您的提示。我是否将自治事务的正确用法编辑为子过程? – tp9

+0

看起来很好。 –

+0

今天早上测试一下。奇迹般有效。再次感谢我正在寻找的东西。 – tp9

2

在逐行基础上监视PL/SQL性能的更好方法之一是使用DBMS_Profiler,它将为您提供每行的执行统计信息以及它执行的次数。

它当然不会诊断SQL执行问题,但它会突出显示执行每个语句花费了多少执行时间。

+0

谢谢,这将有助于解决问题。我仍然需要autonomous_transaction来跟踪块语句,看看我是否需要杀死这个工作。没有它,我很难估计声明要运行多久。 – tp9

2

另一种方法是使用DBMS_Application_Info。

您可以通过设置“操作名称”并通过v $ session_longops维护进度报告来将元数据添加到v $ session中的会话以共享进度。

+0

哇。感谢您指点我这个软件包。这正是我所期待的。用于监视会话对象的内置功能。 – tp9