1

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

有没有办法在块运行时输出 dbms_output.put_line 语句?

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

编辑添加解决方案:

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;
4

3 回答 3

2

另一种方法是使用 DBMS_Application_Info。

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

于 2012-06-06T07:31:02.057 回答
2

One of the better ways of monitoring PL/SQL performance on a row-by-row basis is to use DBMS_Profiler, which will give you execution statistics for each row and how many times it executed.

It won't diagnose a SQL execution problem of course, but it will highlight how much of your execution time is spent on executing each statement.

于 2012-06-01T10:38:41.317 回答
1

dbms_output.put_line语句只会在执行 pl/sql 块后显示,因此它们不适合在代码运行时识别问题。

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

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

于 2012-06-01T06:07:12.517 回答