oracle中的Pragma内联与固定对象

oracle中的Pragma内联与固定对象,oracle,oracle10g,oracle11g,Oracle,Oracle10g,Oracle11g,谁能告诉我oracle中的内联Pragma和固定对象之间有什么区别 根据我的理解,锁定对象意味着将数据库包保存在Oracle数据库的System Global Area(SGA)共享池中` Inline Pragma指定子程序调用是否要内联。内联将子程序调用(对同一程序单元中的子程序)替换为编译时被调用子程序的副本 oracle是否也在SGA中存储编译后的代码?如果用户对数据库中的同一对象执行Pinning以及Inline Pragma。oracle必须将代码加载到SGA中的共享池中才能运行,是

谁能告诉我oracle中的
内联Pragma
固定对象之间有什么区别

根据我的理解,锁定对象意味着将数据库包保存在Oracle数据库的
System Global Area(SGA)共享池中`

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


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

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

内联确定编译器是否选择内联复制子程序的代码,这通常会使编译后的产品稍大,因此需要共享池中稍大的空间,以换取在运行时不必跳转到子程序。通常,内联不是您用
PRAGMA
手动指定的内容,而是编译器通过将
PLSQL\u OPTIMIZE\u LEVEL
设置为3来自动处理的内容。从

当PLSQL_OPTIMIZE_LEVEL=3时,PL/SQL编译器会寻找机会 内联子程序。您不需要指定要内联的子程序。 但是,您可以使用内联pragma(使用前面的语法)来 给子程序一个内联优先级,然后给编译器一个内联优先级 内联,除非其他考虑因素或限制使内联 不受欢迎


在我的数据库中,
PLSQL\u OPTIMIZE\u LEVEL
设置为2,如果在我的生产数据库中将其值设置为3,是否会有任何缺点。@GauravSoni-可能不会。但是,与任何参数更改一样,最好先在较低的环境中进行测试,因为编译器优化很可能会产生性能问题。很少见,但有可能。好吧,这让我回想起过去。我已经很多年没有需要在Oracle中固定软件包了。