PostgreSQL 源码解读(211)- 后台进程#10(checkpointer-BufferSync)


本节介绍了checkpoint中用于刷盘的函数:BufferSync,该函数Write out all dirty buffers in the pool免费云主机域名(把缓冲池中所有脏页持久化到物理存储中).

值得一提的是:checkpoint只会处理在checkpoint开始时的脏页(标记为BM_CHECKPOINT_NEEDED),而不会处理在checkpoint变脏的page.


宏定义


checkpoints request flag bits,检查点请求标记位定义.

BufferSync : 把缓冲池中所有脏页持久化到物理存储中.其主要逻辑如下:

1.执行相关校验,如确保调用SyncOneBuffer函数的正确性等;

2.根据checkpoint标记设置mask标记(如为XX,则unlogged buffer也会flush);

3.遍历缓存,使用BM_CHECKPOINT_NEEDED标记需要刷盘的缓存page;如无需要处理的page,则返回;

4.排序需刷盘的脏页,避免随机IO,提升性能;

5.为每一个需要刷脏页的表空间分配进度状态;

6.在单个标记的写进度上构建最小堆,并计算单个处理缓冲区占比多少;

7.如ts_heap不为空,循环处理

7.1获取buf_id

7.2调用SyncOneBuffer刷盘

7.3调用CheckpointWriteDelay,休眠以控制I/O频率

7.4释放资源,更新统计信息

测试脚本

跟踪分析

PG Source Code

PgSQL 特性分析 谈谈checkpoint的调度

相关推荐: PostgreSQL 源码解读(211)- 后台进程#10(checkpointer-BufferSync)

本节介绍了checkpoint中用于刷盘的函数:BufferSync,该函数Write out all dirty buffers in the pool免费云主机域名(把缓冲池中所有脏页持久化到物理存储中). 值得一提的是:checkpoint只会处理在ch…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 12/31 17:10
下一篇 12/31 17:10