Pragma Inline Vs在oracle中固定对象

时间:2012-03-30 15:42:19

标签: oracle oracle10g oracle11g

任何人都可以告诉我INLINE Pragmapinned objects in oracle之间的区别。

根据我的理解pinning objects means Keeping database packages in the Oracle database's系统全局区域(SGA)共享池`

Inline Pragma指定子程序调用是否内联。内联用compile time上的被调用子程序的副本替换子程序调用(到同一程序单元中的子程序)。

oracle是否也将已编译的代码存储在SGA中?如果用户对数据库中的同一对象执行Pinning以及Inline Pragma该怎么办。

1 个答案:

答案 0 :(得分:3)

Oracle必须将代码加载到SGA中的共享池中才能运行它,是的。通常,不需要在内存中固定对象,因为Oracle会根据最近最少使用的算法将它们从共享池中移除。因此,如果频繁调用一段代码,它将保留在共享池中。如果不经常调用它,它可能会老化,您可能必须在下次调用时从磁盘重新读取它。但这通常正是您想要发生的事情 - 您希望优化频繁发生的事情,并且当您从磁盘读取不常访问的代码时,您希望承担少量磁盘I / O的成本。

内联确定编译器是否选择复制内联子程序的代码,这通常会使编译的产品略大,因此在共享池中需要稍多的空间,以换取不必在运行时跳转到子程序。通常,内联不是您使用PRAGMA手动指定的内容,编译器会通过将PLSQL_OPTIMIZE_LEVEL设置为3来自动处理。PL/SQL Language Reference < / p>

  

PLSQL_OPTIMIZE_LEVEL = 3时,PL / SQL编译器会寻找机会   内联子程序。您无需指定要内联的子程序。   但是,您可以使用INLINE编译指示(使用前面的语法)   为子程序提供内联的高优先级,然后是编译器   除非其他考虑因素或限制内联,否则将其内联   不希望的。