我正在学习EDB PostgreSQL 基础课程,讲师解释了 PostgreSQL 架构,并参考该图,每当客户端发出更新请求并假设数据存在于共享缓冲区中(这意味着无需从文件存储中获取数据),那么它'将在 WAL 缓冲区中创建一个条目,并在提交时,WAL 编写器会将事务写入事务日志并使其永久化,但不会在文件系统中(据我所知,这是下面checkpointer的任务。)到目前为止超好的。
图片由 traning.enterprisedb.com 提供
现在出现了检查指针,它是一个在每隔一定时间间隔“通常5分钟是理想时间”后运行的进程,并将共享缓冲区中的任何内容写入文件存储。
我的问题是,假设 checkpointer 刚刚运行,然后我发起了一个原子交易并转了 100 美元给我的朋友,我的朋友如何立即看到它,Postgres 是否正在查询交易日志?或者说,这是怎么回事?
但经过一番思考,我意识到,当请求更新数据并为了更新它时,Postgres 已将其带入主内存,一种可行的方法是跟踪共享缓冲区中的脏数据,并更新共享缓冲区本身以及事务日志中的数据,我们可以使用0/1
每个 DML 事务条目来识别数据是否存在于共享缓冲区中。这在进行分析时也可以派上用场。
有人可以帮我理解吗?提前致谢!