摘要:
VFD是为了解决文件句柄的限制,防止把OS级别的文件句柄用光。原来我认为VFD是各个进程间共有的。但是根据观察,发现每一个进程都拥有自己的VFD数组指针。看看下面两段加了调试信息后的代码:InitFileAccess:从VfdCache = (Vfd *) malloc(sizeof(Vfd)) 基本可以断定,没有使用共享内存方式/* * InitFileAccess --- initialize this module during backend startup * * This is called during either normal or standalone backend st 阅读全文
摘要:
在PostgreSQL运行的时候,通过对其代码进行跟踪,发现不断有进程被生成,访问InitFileAccess,过了大约20秒左右,就死掉了。这个过程反复地进行着,进程号不断增加。我对其进一步进行了跟踪,发现似乎是这些进程是为了 autovacuum 而被创建出来,然后自己消亡的。在PostgreSQL9.2源代码中加入:InitFileAccess(void){ fprintf(stderr,"In %s ...by Process %d\n", __FUNCTION__,getpid()); fprintf(stderr,"------------------ 阅读全文
摘要:
我个人的理解:其实质,和Java里的Hash表有点类似。在C语言中是为了解决数组无法扩展的缺陷。例子:看 PostgreSQL对 VFD的处理:初始化:/* * Virtual File Descriptor array pointer and size. This grows as * needed. 'File' values are indexes into this array. * Note that VfdCache[0] is not a usable VFD, just a list header. */static Vfd *VfdCache;static S 阅读全文