发表于:2007.01.22 10:40
分类: Oracle结构与管理
出处:http://oracle114.itpub.net/post/21719/253691
---------------------------------------------------------------
1)分配keep缓冲区
alter system set db_keep_cache_size = 20m;
2)把表存放在keep中
create table test (a nuber) storage (buffer_pool keep);
或者
alter table test storage(buffer_pool keep);
insert into test values (1);
或者查询记录
select * from test;
3)查看进行了几次物理读,并且在哪个缓冲区里读:
select name,physical_reads,db_block_gets + consistent_gets mem from v$buffer_pool_statistics
where name='KEEP';
4)再查询表记录,然后观察进行了几次物理读,并且在哪个缓冲区里读:
select * from test;
select name,physical_reads,db_block_gets + consistent_gets mem from v$buffer_pool_statistics
where name='KEEP';
注:
1)对表test就行访问时都在db_cache_pool操作。如果没有分配b_keep_cache_size则不会放在keep缓冲区中。
2)如果在把表的内容放入KEEP缓冲区之前,已经对表就行访问,这时数据会放在DB_CACHE_SIZE中。则每次进行数据读取的时候,都从DB_CACHE_SIZE中读取,可以使用如下命令,把DB_CACHE_SIZE中数据清空:
ALTER SYSTEM FLUSH BUFFER_CACHE;
3)alter system flush shared_pool;使用命令刷新共享池,会造成重新分析sql语句。
请参考:
http://www.unixgroup.net/viewtopic.php?p=11639#11639






