继续介绍dbms_shared_pool的用法:
dbms_shared_pool.aborted_request_threshold(5000);
作用:当共享池满无足够内存来满足给定请求时,它将开始释放对象,知道有了足够内存。如果释放出足够多的对象,有可能会影响到性能。我们可以设定当至少超出THESHOLD个字节时,才释放。
设定报错阀值,该值在5000 - 2147483647之间,
只要load的对象大小大于该值而shared pool中没有满足要求的空闲空间时,
不会从lru中flush对象出去,直接以一个ORA-4031错误结束。
yang@rac1>exec sys.dbms_shared_pool.aborted_request_threshold(1000);
BEGIN sys.dbms_shared_pool.aborted_request_threshold(1000); END;
*
ERROR at line 1:
ORA-20000: threshold_size not in valid range: (5000 - 2147483647)
ORA-06512: at "SYS.DBMS_SHARED_POOL", line 91
ORA-06512: at line 1
----------------------------------------------------------
dbms_shared_pool.sizes
列出当前share_pool中大于给定参数k的对象
下面的例子表示shared pool 中没有大于5000k的对象
yang@rac1>exec sys.dbms_shared_pool.aborted_request_threshold(5000);
PL/SQL procedure successfully completed.
有很多大于200k的对象 。
yang@rac1>exec sys.dbms_shared_pool.sizes(200);
SIZE(K) KEPT NAME
------- ------ ---------------------------------------------------------------
635 SYS.STANDARD (PACKAGE)
631 SYSMAN.MGMT_JOB_ENGINE (PACKAGE BODY)
458 APEX_030200.WWV_FLOW (PACKAGE BODY)
372 SYSMAN.MGMT_GLOBAL (PACKAGE)
341 SYS.DBMS_AQADM_SYS (PACKAGE BODY)
315 SYS.DBMS_ISCHED (PACKAGE BODY)
------------------------------------------------------
将对象pin入shared_pool,而不进入LRU 机制,被keep的对象可以是数据库对象,也可以是sql。
unkeep为keep的反操作。
关于dbms_shared_pool.keep/unkeep 的例子