mirror of
https://github.com/postgres/postgres.git
synced 2025-08-05 07:41:25 +03:00
Inherit max_safe_fds to child processes in EXEC_BACKEND mode.
Postmaster sets max_safe_fds by testing how many open file descriptors it can open, and that is normally inherited by all child processes at fork(). Not so on EXEC_BACKEND, ie. Windows, however. Because of that, we effectively ignored max_files_per_process on Windows, and always assumed a conservative default of 32 simultaneous open files. That could have an impact on performance, if you need to access a lot of different files in a query. After this patch, the value is passed to child processes by save/restore_backend_variables() among many other global variables. It has been like this forever, but given the lack of complaints about it, I'm not backpatching this.
This commit is contained in:
@@ -438,6 +438,7 @@ typedef struct
|
|||||||
TimestampTz PgReloadTime;
|
TimestampTz PgReloadTime;
|
||||||
bool redirection_done;
|
bool redirection_done;
|
||||||
bool IsBinaryUpgrade;
|
bool IsBinaryUpgrade;
|
||||||
|
int max_safe_fds;
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
HANDLE PostmasterHandle;
|
HANDLE PostmasterHandle;
|
||||||
HANDLE initial_signal_pipe;
|
HANDLE initial_signal_pipe;
|
||||||
@@ -4741,6 +4742,7 @@ save_backend_variables(BackendParameters *param, Port *port,
|
|||||||
|
|
||||||
param->redirection_done = redirection_done;
|
param->redirection_done = redirection_done;
|
||||||
param->IsBinaryUpgrade = IsBinaryUpgrade;
|
param->IsBinaryUpgrade = IsBinaryUpgrade;
|
||||||
|
param->max_safe_fds = max_safe_fds;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
param->PostmasterHandle = PostmasterHandle;
|
param->PostmasterHandle = PostmasterHandle;
|
||||||
@@ -4964,6 +4966,7 @@ restore_backend_variables(BackendParameters *param, Port *port)
|
|||||||
|
|
||||||
redirection_done = param->redirection_done;
|
redirection_done = param->redirection_done;
|
||||||
IsBinaryUpgrade = param->IsBinaryUpgrade;
|
IsBinaryUpgrade = param->IsBinaryUpgrade;
|
||||||
|
max_safe_fds = param->max_safe_fds;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
PostmasterHandle = param->PostmasterHandle;
|
PostmasterHandle = param->PostmasterHandle;
|
||||||
|
@@ -103,7 +103,7 @@ int max_files_per_process = 1000;
|
|||||||
* Note: the value of max_files_per_process is taken into account while
|
* Note: the value of max_files_per_process is taken into account while
|
||||||
* setting this variable, and so need not be tested separately.
|
* setting this variable, and so need not be tested separately.
|
||||||
*/
|
*/
|
||||||
static int max_safe_fds = 32; /* default if not changed */
|
int max_safe_fds = 32; /* default if not changed */
|
||||||
|
|
||||||
|
|
||||||
/* Debugging.... */
|
/* Debugging.... */
|
||||||
|
@@ -53,6 +53,11 @@ typedef int File;
|
|||||||
/* GUC parameter */
|
/* GUC parameter */
|
||||||
extern int max_files_per_process;
|
extern int max_files_per_process;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is private to fd.c, but exported for save/restore_backend_variables()
|
||||||
|
*/
|
||||||
|
extern int max_safe_fds;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* prototypes for functions in fd.c
|
* prototypes for functions in fd.c
|
||||||
|
Reference in New Issue
Block a user