有时候,一些package编译的特别慢,大多数原因是library cache lock 或者 library cache pin。可以kill掉相关的session再重新编译。有时候用plsql dev来编译pck,也会莫名的慢,可以考虑用sqlplus来编译。
alter package pck_name compile [package|body|SPECIFICATION];
可以用show err[or] 来看编译错误。
如果shared_pool过小,也就是library cache过小,也可能造成编译过慢,因为这些pck也是被cache到内存的。相关数据字典:dba_source,v$db_object_cache等。library cache 无法直接定义其大小,也要通过shared_pool来修改。
如果library cache 长期放大对象,碎片会增多,导致效率低下,可以用
alter system flush shared_pool; 来调整。
个人的一些理解,请大家指教。