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操作。

(2).数据块在48小时之内都未被访问过。

(3).数据对象在24小时之内未被访问过。

(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这个属性。

以上这个示例中,hoursToExpiration的值为1,也即对象的cell_flash_cache的属性虽然设置了keep值,但如果在一个小时内都未有任何访问,则对象的cell_flash_cache的属性会过期失效。(该示例中,hoursToExpiration之所以为1,其实是对某项参数进行了修改,默认值为24。)

 

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]#

发现,数据对象的cell_flash_cache属性从keep变成了default,已经缓存在flashcache中的数据块仍然存在,但缓存保留的优先级发生了变化,也即日后该对象缓存在flashcache中的数据块也会被其它数据对象挤出flashcache。

 

前面讲过,数据块在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]#

posted @   石云华  阅读(628)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
点击右上角即可分享
微信分享提示