这一节
pg
在
postmaster
启动时估算数据库的要打开的文件数,设置VFD数。
Pg
用“虚拟”文件描述符(
VFDs
)缓存来处理打开的文件。因各种原因服务器打开很多文件描述符,包括基表、临时文件(例如排序和
hash spool files
)和像那样随机对
C
例程库的调用;超过系统对单进程能打开的文件数的限制是很容易的。操作系统打开一个文件占用一个文件描述符(
FD
)。(在现代
OS
上这个值大概是
256
,但是在其他
OS
上可能低至
32
,
WinServer2003
里是
512
)
根据实际
OS
文件描述符按需打开或关闭,
“虚拟”文件描述符
由该
LRU
(
Last Recently Used
,最近最少使用)池管理。明显的,
如果一个文件通过这套接口打开,所有后续操作必须也通过这套接口操作(文件类型不是一个真实的文件描述符)。
为了该机制能工作,服务器上的大多数(如果不是所有)文件打开应该使用这些接口来代替
C
函数库(例如
open(2)
和
fopen(3)
)。负责,
pg
可以发现实际文件描述符(
FD
)不够用。
这个事情我赶上过,数据库不是
pg
,在一个用户的生产环境上报数据库的
license
文件已过期,但实际上
license
文件是永不过期。后来定位是因为数据库频繁操作
license
文件时没有使用
VFD
这套接口,
FD
达到了
OS
系统对单进程能打开的文件数的限制引起的,所以有了另一片博文《
Windows
系统进程打开文件句柄数的限制
》,解决办法是使用这套接口操作或者使用
C
函数打开后及时使用
C
函数关闭。
上个图,看一下函数调用过程梗概,中间略过部分细节
设置
VFD
方法调用流程图
2
设置
max_safe_fds
话说
main()->
…
->PostmasterMain()->
…
->
set_max_safe_fds
()
,设置了最大可用的
VFD
,具体只是计算相关数字,没有涉及相关管理的数据结构,所以把代码贴出来
。
/*
* set_max_safe_fds
*
Determine
number of filedescriptors
that fd.c is allowed to use
*/
void
set_max_safe_fds
(
void
)
{
int
usable_fds;
int
already_open;
/*----------
* We want to set
max_safe_fds to
*
MIN(usable_fds, max_files_per_process - already_open)
* less the slop factor for
files that are opened without consulting
* fd.c.
This ensures that we won't exceed either
max_files_per_process
* or the
experimentally-determined EMFILE limit.
*----------
*/
count_usable_fds(max_files_per_process,
&usable_fds, &already_open);
max_safe_fds = Min(usable_fds, max_files_per_process -
already_open);
/*
* Take off the FDs
reserved for system() etc.
*/
max_safe_fds -= NUM_RESERVED_FDS;
/*
* Make sure we still have
enough to get by.
*/
if
(max_safe_fds < FD_MINFREE)
ereport(FATAL,
(errcode(ERRCODE_INSUFFICIENT_RESOURCES),
errmsg(
"insufficient file descriptors available to start
server process"
),
errdetail(
"System allows %d, we need at least %d."
,
max_safe_fds + NUM_RESERVED_FDS,
FD_MINFREE + NUM_RESERVED_FDS)));
elog(DEBUG2,
"max_safe_fds
= %d, usable_fds = %d, already_open = %d"
,
max_safe_fds,
usable_fds, already_open);
}
- 大小: 48.7 KB
分享到:
相关推荐
一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: . 50 PostgreSQL PostgreSQL...
Maven坐标:org.postgresql:postgresql:42.3.1; 标签:postgresql、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构...
关于PostGreSQL中的存储过程 PostGreSQL是一个开源的数据库
Maven坐标:org.postgresql:postgresql:42.2.5; 标签:postgresql、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和...
存储过程 postgresql postgresql存储过程
本程序的重点是如何利用C#对PostgreSQL数据库进行操作,PDatabase.cs是一个完整的操作类,role是角色表的操作类,程序采用三层架构模型。 在对PostgreSQL数据库进行操作时,用到了如何调用存储过程来完成各项操作。...
C#连接Postgresql的两个dll文件:Npgsql.dll Mono.Security.dll
Maven坐标:org.postgresql:postgresql:42.2.2; 标签:postgresql、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构...
Maven坐标:org.postgresql:postgresql:42.2.2; 标签:postgresql、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和...
PostgreSQL中国社区资深数据库专家、沃趣科技首席数据库架构师撰写,PostgreSQL数据库领域经典著作 系统讲解PostgreSQL技术内幕,深入分析PostgreSQL特色功能,包含大量来自实际生产环境的经典案例和经验总结 ...
Maven坐标:org.postgresql:postgresql:42.2.6; 标签:postgresql、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构...
Maven坐标:org.postgresql:postgresql:42.3.3; 标签:postgresql、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构...
postgresql大象数据库还原文件,以及基本设置。
PostgreSQL 是最初伯克利代码的一个开放源码的继承人。它支持大部分 SQL 标准并且提供了许多其它现代特性: 复杂查询 外键 触发器 视图 事务完整性 多版本并发控制 另外,PostgreSQL 可以用许多方法进行扩展...
postgresql 调试模式文件,postgresql 调试模式文件,
postgresql数据库jdbc驱动,jar包。。。。。。。。。。。。
NULL 博文链接:https://haige18.iteye.com/blog/1746527
PostgreSQL 14.1 手册 PostgreSQL 全球开发组 翻译:彭煜玮1,PostgreSQL中文社区2文档翻译组
1.nacos服务,适配postgresql数据库。 2.提供nacos,postgresql的创建nacos数据库脚本。 3.nacos/conf/nacos-pg.sql数据库脚本文件。 4.nacos版本1.4.2。