对bdb log来说,在共享内存中 有一块 buffer,同时每一个 log cursor 都自带一个 malloc的buf. why?
我认为:
region buffer存的是log最末尾,主要用来写. 毕竟 log 是 顺序写的,最末尾的 log rec当然最热. 同时 多个 log rec缓存起来 一次写入对io 有极大好处.
log cursor的buf是用来读的. 可以是log 中每一部分. 这里 类似 read ahread(read behind),每次从disk读,都是读一整块 log buf size.
好处不言而喻,但同时 逻辑 就复杂了,
在logc_get() 中,需要考虑:
要取的 log rec是否在 cursor buf中? (必须 整个 log rec都在 cursor buf)
要取的 log rec是否在 region buf中? (整个 log rec都在 region buf; 部分在region buf,部分需要从disk 读的情况)
从disk log file 读log rec