任何人都可以告诉我INLINE Pragma
和pinned objects in oracle
之间的区别。
根据我的理解pinning objects means Keeping database packages in the Oracle database's
系统全局区域(SGA)共享池`
Inline Pragma
指定子程序调用是否内联。内联用compile time
上的被调用子程序的副本替换子程序调用(到同一程序单元中的子程序)。
oracle是否也将已编译的代码存储在SGA中?如果用户对数据库中的同一对象执行Pinning
以及Inline Pragma
该怎么办。
答案 0 :(得分:3)
Oracle必须将代码加载到SGA中的共享池中才能运行它,是的。通常,不需要在内存中固定对象,因为Oracle会根据最近最少使用的算法将它们从共享池中移除。因此,如果频繁调用一段代码,它将保留在共享池中。如果不经常调用它,它可能会老化,您可能必须在下次调用时从磁盘重新读取它。但这通常正是您想要发生的事情 - 您希望优化频繁发生的事情,并且当您从磁盘读取不常访问的代码时,您希望承担少量磁盘I / O的成本。
内联确定编译器是否选择复制内联子程序的代码,这通常会使编译的产品略大,因此在共享池中需要稍多的空间,以换取不必在运行时跳转到子程序。通常,内联不是您使用PRAGMA
手动指定的内容,编译器会通过将PLSQL_OPTIMIZE_LEVEL
设置为3来自动处理。PL/SQL Language Reference < / p>
PLSQL_OPTIMIZE_LEVEL = 3时,PL / SQL编译器会寻找机会 内联子程序。您无需指定要内联的子程序。 但是,您可以使用INLINE编译指示(使用前面的语法) 为子程序提供内联的高优先级,然后是编译器 除非其他考虑因素或限制内联,否则将其内联 不希望的。