我试图弄清楚为什么插入和更新语句在生产服务器上运行的时间比测试服务器要长很多。我不知道如何在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;
答案 0 :(得分:2)
逐行监控PL / SQL性能的一种更好的方法是使用DBMS_Profiler,它将为您提供每行的执行统计信息以及执行的次数。
当然,它不会诊断SQL执行问题,但它会突出显示执行每个语句所花费的执行时间。
答案 1 :(得分:2)
另一种方法是使用DBMS_Application_Info。
您可以在v $ session中为会话添加元数据,以通过设置“操作名称”和通过v $ session_longops维护进度报告来共享进度。
答案 2 :(得分:1)
dbms_output.put_line
语句,因此它们不适合在代码运行时识别问题。
如果要跟踪长时间运行的进程,可以使用自治事务记录到数据库表(这样就不会干扰当前事务)并监视日志记录表。
采用替代方法,您可以查看在测试服务器和生产服务器上运行的插入和更新语句的解释计划。这可能会识别生产系统的差异,这将解释时差。