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