oracle - Oracle 中的 Pragma Inline 与 Pinning 对象

标签 oracle oracle10g oracle11g

谁能告诉我INLINE Pragmaoracle中的固定对象之间有什么区别。

根据我的理解固定对象意味着将数据库包保留在Oracle数据库的系统全局区域(SGA)共享池中`

Inline Pragma 指定是否内联子程序调用。内联在编译时用被调用子程序的副本替换子程序调用(对同一程序单元中的子程序)。

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

最佳答案

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

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

With PLSQL_OPTIMIZE_LEVEL=3, the PL/SQL compiler seeks opportunities to inline subprograms. You need not specify subprograms to be inlined. However, you can use the INLINE pragma (with the preceding syntax) to give a subprogram a high priority for inlining, and then the compiler inlines it unless other considerations or limits make the inlining undesirable.

关于oracle - Oracle 中的 Pragma Inline 与 Pinning 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9946223/

相关文章:

sql - 如何使用 SQL 打印出圣诞树?

oracle - 我想在oracle中手动将ASCII流插入到BLOB类型的列中

sql - 处理递归(oracle)

sql - 日期以 'dd-mon-yyyy' 格式传递的 to_char 函数问题

oracle11g - 甲骨文顶点 |如何使用带时间的日期选择器?

mysql - 使用 SQL 进行模式匹配

oracle - pl/sql 中的异常处理

oracle - 在oracle触发器中获取 session os用户

sql - 如果加入返回 NULL 则执行以下操作

java - 我们可以在 ODI 11G 中使用 Oracle ODI SDK 公共(public) API 创建 IKM 吗?