set caching priority
此函数专门用于为持久化类生成缓存优先级设置。
通过在每个缓存页面上设置缓存优先级属性值,可以改进基本的最近最少使用(LRU)缓存策略,从而允许应用程序影响某些页面在磁盘管理器缓存中保留的时间。
MCO_RET classname_set_caching_priority(
/*IN*/ mco_trans_h trans,
/*IN*/ int priority
);
当 LRU 算法选择一个“受害者”时,并不会立即释放该页面(即从 L2 链表尾部移除),而是检查其 caching_priority
字段。如果该字段的值不为零,则将 caching_priority
减 1,并将页面重新链接到 L2 列表的开头。
缓存优先级为:
- 0 :表示默认行为;
- 1 :表示该页面将在 LRU 列表中从头部移动到尾部两次;
- 2: 表示在 LRU 列表中循环三次,依此类推。优先级越高,页面在 LRU 列表中保持链接的时间就越长,从而在缓存中保留的时间也越长。
在创建数据库时,应用程序可以通过 mco_db_params_t 结构中的 index_caching_priority
、allocation_bitmap_caching_priority
和 objects_caching_priority
字段分别为索引、内存分配器位图页面和对象页面(不包括 BLOB)分配优先级。默认情况下,所有页面具有相同的优先级(即 0)。
此外,此功能允许在运行时动态调整类的缓存优先级。以预设对象优先级为基准,可以调整某些类的相对优先级。例如,可以将大且很少访问的对象分配较低的优先级,而将小且频繁访问的对象分配较高的优先级。在运行时分配的缓存优先级将存储在数据库中,并一直使用,直到被显式覆盖。
有关详细信息,请参阅持久数据库 I/O页面。
参数
trans
mco_trans_h
由 mco_trans_start()
函数返回的 MCO_READ_WRITE
事务句柄。
priority
int
指定优先级的整数值。
返回
MCO_S_OK
日志含义设置缓存优先级成功。
示例
/* 模式定义代码片段 */
declare database hybriddb;
transient class A
{
unsigned<4> ui4;
...
};
persistent class B
{
unsigned<4> ui4;
...
};
/* 应用程序代码片段 */
const char * db_name = "hybriddb";
int main(int argc, char* argv[])
{
MCO_RET rc = MCO_S_OK;
mco_db_h db = 0;
mco_trans_h t;
...
B b;
...
{
rc = mco_trans_start( db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &t );
...
rc = B_set_caching_priority( t, 1 );
...
}