innodb buffer pool管理--flush list

//在mtr_commit时,将脏页添加到flush list头部。
mtr_commit
    if (mtr->modifications && mtr->n_log_recs) {
		mtr_log_reserve_and_write(mtr);->
           mtr_add_dirtied_pages_to_flush_list(mtr);->
   	}

mtr_add_dirtied_pages_to_flush_list
log_flush_order_mutex_enter();
mutex_exit(&(log_sys->mutex));
mtr_memo_note_modifications(mtr);-> buf_flush_note_modification(block, mtr);->
    mutex_enter(&block->mutex);
    buf_flush_list_mutex_enter(buf_pool);
    block->page.oldest_modification = mtr->start_lsn;
    if (!block->page.oldest_modification) {
         UT_LIST_ADD_FIRST(list, buf_pool->flush_list, &block->page);
    }
    buf_flush_list_mutex_exit(buf_pool);
    mutex_exit(&block->mutex);
log_flush_order_mutex_exit();

1、  先申请log_sys->log_flush_order_mutex

2、  申请完就释放log_sys->mutex。为了减少log_sys->mutex的持有时间,减少竞争,采用先申请log_flush_order_mutex来保证脏页插入flush list的顺序。

3、  申请页的mutex、申请flush listmutex

4、  得到脏页的oldest_modification,以便在真正刷时写入到页内

5、  如果该脏页已经在flushlist里面,则不需要插入,否则将脏页插入到flush list

6、  释放flush listmutex、脏页的mutex、log_sys->log_flush_order_mutex


已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值