设为首页 加入收藏

TOP

innodb之changebuffer被动merge(二)
2015-11-21 01:59:48 来源: 作者: 【 】 浏览:1
Tags:innodb changebuffer 被动 merge
)执行一次同步ibuf merge(ibuf_contract),merge的page no是随机定位的记录的page no,最多一次merge 8页,同时放弃本次缓存

2、 其中ibuf_max_size=25%*bufferpool size,百分比由innodb_change_buffer_max_size控制,可动态调整。

…

if (ibuf->size >= ibuf->max_size +IBUF_CONTRACT_DO_NOT_INSERT) {

/*Insert buffer is now too big, contract it but do not try to insert */

/* Use synchronous contract (== TRUE) */

ibuf_contract(TRUE);

return(ibuf_merge(0, &n_pages, sync));

return(ibuf_merge_pages(n_pages,sync));

return(DB_STRONG_FAIL);

}

?

被动merge情景三,insert 操作可能产生ibuf btree分裂:ibuf0ibuf.cc:: ibuf_insert_low

说明:

1、 当ibuf->size max_size时(IBUF_CONTRACT_ON_INSERT_NON_SYNC=0)不做任何操作

2、 当ibuf->size>= ibuf->max_size+5时,ibuf_contract(true),同步一次ibuf merge,位置随机

3、 当ibuf->max_size< ibuf->size <= ibuf->max_size+5时,ibuf_contract(false),异步merge,位置随机。

4、 Merge至少8页,ut_min(IBUF_MAX_N_PAGES_MERGED, buf_pool_get_curr_size() / 4);

……

if (err == DB_SUCCESS && mode ==BTR_MODIFY_TREE) {

ibuf_contract_after_insert(entry_size);

if (size < max_size +IBUF_CONTRACT_ON_INSERT_NON_SYNC) {

return;

}

sync = (size >= max_size +IBUF_CONTRACT_ON_INSERT_SYNC);

size = ibuf_contract(sync);

return(ibuf_merge(0,&n_pages, sync));

return(ibuf_merge_pages(n_pages,sync));

}

……

?

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇mysql根据查询结果创建表 下一篇ORA-19815,Flashback Logs-Space ..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: