Flashcache的 KEEP属性自动失效
如果希望一个数据对象长期地缓存在flashcache中,则可以手动地将该数据对象的CELL_FLASH_CACHE属性设置为"keep"。
其实需要说明的是,但不是数据对象的CELL_FLASH_CACHE属性设置成为"keep"后,这些数据块就永久地缓存在flashcache中了,CELL_FLASH_CACHE属性设置为"keep"仅仅是数据块缓存的优先级最高,但并不保证能永久地缓存在flashcache中。
在一定的条件下,那些CELL_FLASH_CACHE属性设置成为"keep"的数据块,也会被自动地解除这个缓存最高优先级。例如:
(1).数据对象被drop掉、truncate掉,或做过shrunk操作。
(4).数据对象的CELL_FLASH_CACHE属性被修改为"default"或"none"。
SQL> alter table test.mm storage(cell_flash_cache keep);
Table altered.
SQL> select object_id, data_object_id from dba_objects where object_name='MM';
OBJECT_ID DATA_OBJECT_ID ---------- -------------- 13952 13952
SQL> select bytes from dba_segments where segment_name='MM';
BYTES ---------- 65536
SQL> [root@cell01 trace]# cellcli -e list flashcachecontent where objectNumber=13952 detail cachedKeepSize: 65536 cachedSize: 65536 dbID: 195867650 dbUniqueName: EXADB hitCount: 3 hoursToExpiration: 1 missCount: 1 objectNumber: 13952 tableSpaceNumber: 4 [root@cell01 trace]# |
只有cell_flash_cache的属性设置了keep的数据对象,在flashcachecontent中才有hoursToExpiration这个属性。
1小时之后,再次查询该对象在flashcache中的缓存情况时:
[root@cell01 trace]# cellcli -e list flashcachecontent where objectNumber=13952 detail cachedKeepSize: 0 cachedSize: 65536 dbID: 195867650 dbUniqueName: EXADB hitCount: 3 missCount: 1 objectNumber: 13952 tableSpaceNumber: 4 [root@cell01 trace]# |
前面讲过,数据块在48小时之内都未被访问过,或数据对象在24小时之内未被访问过,则该对象flashcache的keep属性会被自动解除掉,变成default。这个keep属性的过期时间是由存储节点的两个隐含参数(_cell_buffer_expiration_hours和_cell_object_expiration_hours)来进行控制的。
---- 打印出存储节点当前所有的参数: CellCLI> alter cell events="immediate cellsrv.cellsrv_dump('cellparams',0)" Dump sequence #1 has been written to /opt/oracle/cell11.2.3.2.0_LINUX.X64_120713/log/diag/asm/cell/cell01/trace/svtrc_1834_75.trc Cell cell01 successfully altered CellCLI> ---- 查看控制keep属性过期时间的参数: [root@cell01 trace]# cat svtrc_1834_75.trc |grep expiration_hours _cell_buffer_expiration_hours = 48 _cell_object_expiration_hours = 24 [root@cell01 trace]# |