oracle plsql性能优化

官方文档:http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/tuning.htm#LNPLS012

1. plsql_optimizer_level 范围值:0~3,11g中默认值为2,通常来说这个参数设置的越大,PLSQL引擎会提供越好的性能。

  0:主要是为了兼容9i,10G以后此参数值弊大于利?

  1:会取出一些不必要的计算和异常,但是一般不会改变源代码

  2:有可能会改变源代码的顺序结构

  3:优化效果优于2

  此参数不建议修改,如果遇到特殊情况程序编译很慢,可考虑将其设置为1。  

 

2. plsql_code_type 可选值为:native | interpreted,默认值为interpreted

 native:编译成机器码,解析慢,执行快,存储在SYSTEM表空间

 interpreted: 编译成字节码,被PLSQL解释引擎调用,解析快,执行稍慢。

 如果一个plsql程序单元使用的是native编译,那么以后该程序单元的重新编译总是native编译的,可通过user_plsql_object_settings/dbs_plsql_object_settings查询。

 如果经过测试确定plsql原生编译会带来性能上的提升,oracle建议将该参数设置为native。

 

3. 内部单元内联(subprogram inlining)

  只有当plsql_optimize_level为2或者3的时候内部单元内联才会启用

  plsql_optimize_level = 2: 需要显示指定需要内联的内部程序 pragma inline('subprogram','YES');

               关闭内部程序内联:pragma inline('subprogram','NO');

  plsql_optimize_level = 3: plsql编译器会伺机内联内部单元,无需显示声明;当然也可以通过显示声明让编译器优先内联该内部单元。

   通常情况下,当对内部程序的调用时间占整个内部程序的执行时间比重较大时,内联函数对性能提升较大。

 

4. 尽量不要在sql中做函数调用,如果table的column被作为参数传给了function,则不能使用该column上的索引。尽量先过滤数据,只对需要使用函数的数据应用函数。

  尽量使用PLS_INTEGER,BINARY_FLOAT,BINARY_DOUBLE等硬编码的数据类型。

  FORALL和BULK COLLECT减少sql引擎和plsql引擎的交互。

 

posted on 2016-02-17 15:18  收苞米的拖拉机  阅读(471)  评论(0编辑  收藏  举报