尝试在内存中固定经常使用的对象,包括表,存储过程等。
一 固定频繁使用的表
如果我们要固定表,那么可以在创建表的时候或者修改表属性时使用CACHE关键字,将表放置到Buffer Cache的LRU列表的MRU端。通常我们需要对于较小的但是频繁使用的表进行这种操作。
ALTER TABLE TABLE_NAME CACHE;
我们也可以将需要频繁使用的表放置到另外一个独立的Buffer Cache中,比如KEEP池。这种操作可以使这些表的数据不至于很快被清除出Default Buffer Cache。
ALTER TABLE STORAGE (BUFFER_POOL KEEP); ALTER INDEX
STORAGE (BUFFER_POOL KEEP);
比如:
ALTER TABLE TEST1 STORAGE (BUFFER_POOL KEEP);
二 固定频繁使用的过程函数
检索需要在共享池中要求大于100K连续空间的对象:
select *
from v$db_object_cache
where sharable_mem > 100000
and type in ('PACKAGE', 'PACKAGE BODY', 'PROCEDURE', 'FUNCTION');
考察返回的结果,确认是否需要pin到共享池中,返回结果中的KEPT字段如果是YES,那么表示该对象已经固定在了共享池中,为NO,则表示还没有固定。
如果需要固定,使用下面的语句:
exec dbms_shared_pool.keep('SYS.STANDARD');
数据库默认安装的时候没有创建dbms_shared_pool包,所以需要先创建该包。
cd $ORACLE_HOME/rdbms/admin
sqlplus “/ as sysdba”
@dbmspool.sql
三 绝缘很少使用的表
SGA内存空间很宝贵,所以我们通常将很少使用的表排除出SGA
SQL> ALTER TABLE TEST2 STORAGE(BUFFER_POOL RECYCLE);
Table altered.
相关知识:
SGA中Database Buffer Cache 由三个部分组成
DB_CACHE_SIZE 保存普通数据库对象
DB_KEEP_CACHE_SIZE 保存经常使用的数据库对象 (经常使用的小表)
DB_RECYCLE_CACHE_SIZE 保存很少使用的数据库对象 (很少使用的大表)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/720091/viewspace-915658/ ,如需转载,请注明出处,否则将追究法律责任。