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引擎的交互。

 

转载于:https://www.cnblogs.com/yasun/p/5195435.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值