【问题标题】:How can I make sure a PL/SQL program is compiled with optimization turned on?如何确保在编译 PL/SQL 程序时启用了优化?
【发布时间】:2018-04-12 14:50:15
【问题描述】:

我有一个计算密集型 PL/SQL 过程。如果它没有在优化级别设置为至少 2 的情况下编译(是的,我知道这是默认值),那么性能很糟糕。如何确保始终编译此过程时将级别设置为 2 或更高?

【问题讨论】:

    标签: oracle performance optimization plsql conditional-compilation


    【解决方案1】:

    PL/SQL 的条件编译特性,更具体地说是错误指令,在这种情况下非常方便。在下面的示例中,我将优化级别设置为 1,然后尝试编译我的计算密集型过程。在该过程中,我通过 $$plsql_optimize_level 条件编译标志检查会话中优化级别的值。如果小于 2,我强制编译错误。

    ALTER SESSION SET plsql_optimize_level = 1
    /
    
    CREATE OR REPLACE PROCEDURE compute_intensive
    AUTHID DEFINER
    IS
    BEGIN
       $IF $$plsql_optimize_level < 2
       $THEN
          $ERROR 
             'Compile compute_intensive at level 2 or higher!' 
          $END
       $END
       NULL;
    END compute_intensive;
    /
    
    Errors: PROCEDURE COMPUTE_INTENSIVE
    Line: 7 PLS-00179: $ERROR: compute_intensive must be compiled with maximum optimization!
    
    ALTER SESSION SET plsql_optimize_level = 3
    /
    
    CREATE OR REPLACE PROCEDURE compute_intensive
    AUTHID DEFINER
    IS
    BEGIN
       $IF $$plsql_optimize_level < 2
       $THEN
          $ERROR 'compute_intensive must be compiled with maximum optimization!' $END
       $END
       NULL;
    END compute_intensive;
    /
    
    Procedure created.
    

    用我的LiveSQL script自己试试吧。

    更多关于条件编译的信息here

    【讨论】:

    • 嘿,我最近读了你的文章On Conditional Compilation( COMPUTE_INTENSIVE_PROGRAM)。我也喜欢你的博客 :) 我希望 PL/SQL 对于未来的发展不会死
    • 死了?天哪!新特性的速度已经放缓,主要是因为 PL/SQL 已经如此强大,并且已经为它作为一种数据库编程语言的目的而精心打磨。但绝对不会死,它将作为数据 API 发挥越来越重要的作用:Javascript JSON REST PL/SQL package api SQL。谢谢!
    猜你喜欢
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    相关资源
    最近更新 更多