将数据常驻内存 #
Database Buffer Cache有三个池:默认池(default pool),保持池(keep pool),回收池(recycle pool)。对于用户频繁访问的表或索引,可以放置在这keep pool中,放在default pool中的数据块也可频繁访问,但这些数据会老化而退出default pool。
- 查看keep pool大小
show parameter db_keep_cache_size
- 查看当前数据库缓冲区
select id,name,block_size,buffers from v$buffer_pool;
- 收集需要保存到keep pool中的对象的最新统计信息
analyze index scott.SCOTT_EMP_INCOME_IDX compute statistics;
analyze table scott.salgrade compute statistics;
- 从dba_segments中查询出需要保存到keep spool中的对象所用的块的数量
select segment_name,segment_type,blocks from dba_segments where owner='SCOTT' and segment_name in ('XXX','XXXX');
- 计算出所需容量并设置大小
alter system set db_keep_cache_size=10M;
- 用第2步相同的操作确认keep pool的创建
- 将对象设置为常驻内存
alter table salgrade storage(buffer_pool keep);
alter index scott_emp_idx storage(buffer_pool keep);
- 将对象恢复为默认缓冲池
alter table salgrade storage(buffer_pool default);
- 确认对象所在缓冲池
select table_name,tablespace_name,buffer_pool from user_tables where table_name='SALGRADE';
select index_name,table_name,buffer_pool from user_indexes where index_name='XXX_IDX';