谁能告诉我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,该怎么办?
发布于 2012-03-31 00:57:54
Oracle必须将代码加载到SGA中的共享池中才能运行它,是的。通常,不需要将对象固定在内存中,因为Oracle根据最近最少使用的算法将它们从共享池中老化出来。因此,如果一段代码被频繁调用,它将被保存在共享池中。如果它不经常被调用,它可能会过期,您可能需要在下一次调用时重新从磁盘读取它。但这通常正是您希望发生的事情--您希望优化频繁发生的事情,并且希望在从磁盘读取不经常访问的代码时产生一些磁盘I/O的开销。
内联确定编译器是否选择内联复制子程序的代码,这通常会使编译后的产品稍微大一些,因此在共享池中需要稍微多一点的空间,以换取不必在运行时跳转到子程序。一般来说,内联不是你用PRAGMA手动指定的东西,它是由编译器通过将PLSQL_OPTIMIZE_LEVEL设置为3来自动处理的东西。
使用PLSQL_OPTIMIZE_LEVEL=3,PL/
编译器寻找内联子程序的机会。您不需要指定要内联的子程序。但是,您可以使用内联杂注(使用上述语法)为子程序提供内联的高优先级,然后编译器将其内联,除非其他考虑因素或限制使内联变得不可取。
https://stackoverflow.com/questions/9946223
复制相似问题