oracle优化------缓存对象与数据(5)
例如用下面的sql查出长度大于500个字符,共享内存大于10000个字节的对象
select *
  from v$db_object_cache oc
 where length(oc.NAME) > 500
   and oc.TYPE in (PACKAGE, PROCEDURE, FUNCTION, PACKAGE BODY)
   and oc.KEPT=NO
   and oc.SHARABLE_MEM>10000
查看长度超过500字符,共享内存大于20000个字节的匿名pl/sql 
select *
  from v$sqlarea sq
 where sq.COMMAND_TYPE = 47
   and length(sq.SQL_TEXT) > 500
   and sq.SHARABLE_MEM>20000
把这些对象要keep在共享池中要用dbms_shared_pool.keep,系统默认是没有安装这个包的,需要运行dbmspool.sql这个脚本
@/home/oracle/10.2.0/db_1/rdbms/admin/dbmspool.sql">SYS@skatedb>@/home/oracle/10.2.0/db_1/rdbms/admin/dbmspool.sql 
Package created.
Grant succeeded.
View created.
Package body created.
SYS@skatedb >
SQL> desc dbms_shared_pool
Element                   Type      
------------------------- --------- 
SIZES                     PROCEDURE 
KEEP                      PROCEDURE 
UNKEEP                    PROCEDURE 
ABORTED_REQUEST_THRESHOLD PROCEDURE 
SQL> desc dbms_shared_pool.keep
Parameter Type     Mode Default? 
--------- -------- ---- -------- 
NAME      VARCHAR2 IN            
FLAG      CHAR     IN   Y    
SQL> desc dbms_shared_pool.unkeep
Parameter Type     Mode Default? 
--------- -------- ---- -------- 
NAME      VARCHAR2 IN            
FLAG      CHAR     IN   Y    
ABORTED_REQUEST_THRESHOLD(threshold_size NUMBER): 这个方法可以设定一个界限,保证如果要进入SHARED POOL的对象太大,那么可以设置一个阀值,超过这个阀值的直接报错,而不是经过LRU查找和内存交换之后发现SHARED POOL不够了再报错,可以防
止超大对象过度占用SHARED POOL空间。
UNKEEP 就是KEEP 的反操作
SIZES (minsize NUMBER): 这个是列出SHARED POOL中所有大于minsize的对象,对于查找SHARED POOL中大对象并设置合理
的ABORTED_REQUEST_THRESHOLD很有用。
说明 flag:
 Value        Kind of Object to keep 
   --        -----        ---------------------- 
   --        P          package/procedure/function 
	
相关新闻>>
- 发表评论
 - 
				
 
- 最新评论 进入详细评论页>>
 







