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
相关新闻>>
- 发表评论
-
- 最新评论 更多>>