【发布时间】:2018-04-12 14:50:15
【问题描述】:
我有一个计算密集型 PL/SQL 过程。如果它没有在优化级别设置为至少 2 的情况下编译(是的,我知道这是默认值),那么性能很糟糕。如何确保始终编译此过程时将级别设置为 2 或更高?
【问题讨论】:
标签: oracle performance optimization plsql conditional-compilation
我有一个计算密集型 PL/SQL 过程。如果它没有在优化级别设置为至少 2 的情况下编译(是的,我知道这是默认值),那么性能很糟糕。如何确保始终编译此过程时将级别设置为 2 或更高?
【问题讨论】:
标签: oracle performance optimization plsql conditional-compilation
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。
【讨论】: