2

根据http://www.postgresql.org/docs/current/static/storage-file-layout.html

“当一个表或索引超过 1 GB 时,它被划分为千兆字节大小的段。第一个段的文件名与 filenode 相同;后续段命名为 filenode.1、filenode.2 等。”

我想知道源代码在哪里处理。我一直在寻找最后几个小时,但没有运气

编辑:如果有人可以引导我将页面从缓冲区写入磁盘的代码,那也将不胜感激。

4

1 回答 1

2

您主要是在寻找src/backend/storage/smgr/smgr.crelfilenodesrc/backend/storage/smgr/md.c管理。主文件由 a 引用,RelFileNodeBackendforks 由ForkNumber. 开始backend/storage/smgr/README

git grep将帮助您更快地找到东西;快速cd src; git grep --color relfilenode帮助找到了代码库的相关区域。

缓冲区缓存管理和脏写出是完全分开的。使用 bgwriter(后台写入器)使情况变得复杂,它急切地将共享内存中的脏缓冲区写入磁盘,而不会阻塞正在工作的后端。我对代码的那部分不是特别熟悉,但是花点时间git grep开发人员文档应该可以帮助您找到解决方法。

于 2013-04-20T09:56:08.013 回答