根据http://www.postgresql.org/docs/current/static/storage-file-layout.html
“当一个表或索引超过 1 GB 时,它被划分为千兆字节大小的段。第一个段的文件名与 filenode 相同;后续段命名为 filenode.1、filenode.2 等。”
我想知道源代码在哪里处理。我一直在寻找最后几个小时,但没有运气
编辑:如果有人可以引导我将页面从缓冲区写入磁盘的代码,那也将不胜感激。
根据http://www.postgresql.org/docs/current/static/storage-file-layout.html
“当一个表或索引超过 1 GB 时,它被划分为千兆字节大小的段。第一个段的文件名与 filenode 相同;后续段命名为 filenode.1、filenode.2 等。”
我想知道源代码在哪里处理。我一直在寻找最后几个小时,但没有运气
编辑:如果有人可以引导我将页面从缓冲区写入磁盘的代码,那也将不胜感激。
您主要是在寻找src/backend/storage/smgr/smgr.c
relfilenodesrc/backend/storage/smgr/md.c
管理。主文件由 a 引用,RelFileNodeBackend
forks 由ForkNumber
. 开始backend/storage/smgr/README
。
git grep
将帮助您更快地找到东西;快速cd src; git grep --color relfilenode
帮助找到了代码库的相关区域。
缓冲区缓存管理和脏写出是完全分开的。使用 bgwriter(后台写入器)使情况变得复杂,它急切地将共享内存中的脏缓冲区写入磁盘,而不会阻塞正在工作的后端。我对代码的那部分不是特别熟悉,但是花点时间git grep
和开发人员文档应该可以帮助您找到解决方法。