db_keep_cache_size參数的控制范围測试
Posted liguangsunls
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了db_keep_cache_size參数的控制范围測试相关的知识,希望对你有一定的参考价值。
ocm考试新题中。须要创建keep存储的表,但在该參数是否应该改动上,有一些分歧。有人说asmm会自己主动给keep分配内存的,该參数就不用设置了。
看文档和asktom。也是云山雾罩,说什么的都有,还是来实际的測试吧:
SQL> col COMPONENT for a30 SQL> select COMPONENT,CURRENT_SIZE/1024/1024||'MB' MB from V_$SGA_DYNAMIC_COMPONENTS where COMPONENT in ('DEFAULT buffer cache','KEEP buffer cache'); COMPONENT MB ------------------------------ ------------------------------------------ DEFAULT buffer cache 352MB KEEP buffer cache 0MB SQL> conn hr/hr Connected. SQL> drop table t1 purge; Table dropped. SQL> create table t1 as select * from employees; Table created. SQL> insert into t1 select * from t1; 107 rows created. SQL> / 214 rows created. SQL> / 428 rows created. SQL> / 856 rows created. SQL> / 1712 rows created. SQL> / 3424 rows created. SQL> / 6848 rows created. SQL> / 13696 rows created. SQL> commit; Commit complete. SQL> col SEGMENT_NAME for a10 SQL> select SEGMENT_NAME,BYTES/1024/1024||'mb' MB from user_segments where SEGMENT_NAME='T1'; SEGMENT_NA MB ---------- ------------------------------------------ T1 3mb SQL> alter table t1 storage( buffer_pool keep); Table altered. --造了一张3m的keep表 SQL> set autot on SQL> select count(*) from t1; COUNT(*) ---------- 27392 Execution Plan ---------------------------------------------------------- Plan hash value: 3724264953 ------------------------------------------------------------------- | Id | Operation | Name | Rows | Cost (%CPU)| Time | ------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 85 (0)| 00:00:02 | | 1 | SORT AGGREGATE | | 1 | | | | 2 | TABLE ACCESS FULL| T1 | 26589 | 85 (0)| 00:00:02 | ------------------------------------------------------------------- Note ----- - dynamic sampling used for this statement --做全表扫描,没有物理读,说明是从之前的插入语句读取的数据,并做了240次递归 Statistics ---------------------------------------------------------- 240 recursive calls 1 db block gets 421 consistent gets 0 physical reads 176 redo size 413 bytes sent via SQL*Net to client 385 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 4 sorts (memory) 0 sorts (disk) 1 rows processed SQL> select count(*) from t1; COUNT(*) ---------- 27392 Execution Plan ---------------------------------------------------------- Plan hash value: 3724264953 ------------------------------------------------------------------- | Id | Operation | Name | Rows | Cost (%CPU)| Time | ------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 85 (0)| 00:00:02 | | 1 | SORT AGGREGATE | | 1 | | | | 2 | TABLE ACCESS FULL| T1 | 26589 | 85 (0)| 00:00:02 | ------------------------------------------------------------------- Note ----- - dynamic sampling used for this statement --第二次全表扫描已经没有递归了,说明数据已经存入内存,并整齐摆放了 Statistics ---------------------------------------------------------- 0 recursive calls 0 db block gets 310 consistent gets 0 physical reads 0 redo size 413 bytes sent via SQL*Net to client 385 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed SQL> set autot off SQL> conn / as sysdba Connected. SQL> select COMPONENT,CURRENT_SIZE/1024/1024||'MB' MB from V_$SGA_DYNAMIC_COMPONENTS 2 where COMPONENT in ('DEFAULT buffer cache','KEEP buffer cache'); COMPONENT MB ------------------------------ ------------------------------------------ DEFAULT buffer cache 352MB KEEP buffer cache 0MB --查看内存。整齐摆放的数据并未在keep内存里,说明在default里 SQL> alter system set db_keep_cache_size=12m; System altered. SQL> select COMPONENT,CURRENT_SIZE/1024/1024||'MB' MB from V_$SGA_DYNAMIC_COMPONENTS 2 where COMPONENT in ('DEFAULT buffer cache','KEEP buffer cache'); COMPONENT MB ------------------------------ ------------------------------------------ DEFAULT buffer cache 340MB KEEP buffer cache 12MB --开辟keep内存 SQL> conn hr/hr Connected. SQL> set autot on SQL> select count(*) from t1; COUNT(*) ---------- 27392 Execution Plan ---------------------------------------------------------- Plan hash value: 3724264953 ------------------------------------------------------------------- | Id | Operation | Name | Rows | Cost (%CPU)| Time | ------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 85 (0)| 00:00:02 | | 1 | SORT AGGREGATE | | 1 | | | | 2 | TABLE ACCESS FULL| T1 | 26589 | 85 (0)| 00:00:02 | ------------------------------------------------------------------- Note ----- - dynamic sampling used for this statement --又一次做全表扫描,优化器尽管已经发现内存default里有数据,可是keep内存开辟了,表又是keep的,但keep里没找到数据 --所以在此强制做了物理读 --说明keep參数为0的时候,表尽管是keep的,但数据还是在default里的,keep的大小并未被asmm自己主动分配 Statistics ---------------------------------------------------------- 0 recursive calls 0 db block gets 310 consistent gets 307 physical reads 0 redo size 413 bytes sent via SQL*Net to client 385 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed SQL> select count(*) from t1; COUNT(*) ---------- 27392 Execution Plan ---------------------------------------------------------- Plan hash value: 3724264953 ------------------------------------------------------------------- | Id | Operation | Name | Rows | Cost (%CPU)| Time | ------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 85 (0)| 00:00:02 | | 1 | SORT AGGREGATE | | 1 | | | | 2 | TABLE ACCESS FULL| T1 | 26589 | 85 (0)| 00:00:02 | ------------------------------------------------------------------- Note ----- - dynamic sampling used for this statement Statistics ---------------------------------------------------------- 0 recursive calls 0 db block gets 310 consistent gets 0 physical reads 0 redo size 413 bytes sent via SQL*Net to client 385 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed SQL> spool off假设考keep。该參数,还是打开了吧。recycle同理
以上是关于db_keep_cache_size參数的控制范围測试的主要内容,如果未能解决你的问题,请参考以下文章