0.png
大力出奇迹,函数大锁。
1.png
修改了 NewPage,在写入 Evict 的页释放了函数大锁,主要目的是测试 bug。
2.png
在 FlushPage 的时候释放函数大锁加页锁,在 DeletePage 写入 Delete 的页时释放了函数大锁,结果更差了。
3.png
// 分配一个空闲 block;
// buf_pool_mutex_enter;
// 持有 page_hash x lock;
// 检查 page_hash 中是否已被读入,如果是,表示另外一个线程已经完成了 io,则忽略本次 io 请求,退出;
// 持有 block->mutex,对 block 进行初始化,并加入到 page hash 中;
// 设置 IO FIX 为 BUF_IO_READ;
// 释放 hash lock;
// 将 block 加入到 LRU 上;
// 持有 block s lock;
// 完成 IO 后,释放 s lock;