diff options
author | Robert Haas <rhaas@postgresql.org> | 2011-11-25 08:02:10 -0500 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2011-11-25 08:02:10 -0500 |
commit | ed0b409d22346b1b027a4c2099ca66984d94b6dd (patch) | |
tree | 3d9942b4131ffa73cbf83735c3965b4c1fc7e307 /src/backend/postmaster/postmaster.c | |
parent | 9ed439a9c07b69c2617cc98596611fdbdc22472c (diff) |
Move "hot" members of PGPROC into a separate PGXACT array.
This speeds up snapshot-taking and reduces ProcArrayLock contention.
Also, the PGPROC (and PGXACT) structures used by two-phase commit are
now allocated as part of the main array, rather than in a separate
array, and we keep ProcArray sorted in pointer order. These changes
are intended to minimize the number of cache lines that must be pulled
in to take a snapshot, and testing shows a substantial increase in
performance on both read and write workloads at high concurrencies.
Pavan Deolasee, Heikki Linnakangas, Robert Haas
Diffstat (limited to 'src/backend/postmaster/postmaster.c')
-rw-r--r-- | src/backend/postmaster/postmaster.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 6758083bdd5..963189d4150 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -430,6 +430,7 @@ typedef struct slock_t *ProcStructLock; PROC_HDR *ProcGlobal; PGPROC *AuxiliaryProcs; + PGPROC *PreparedXactProcs; PMSignalData *PMSignalState; InheritableSocket pgStatSock; pid_t PostmasterPid; @@ -4724,6 +4725,7 @@ save_backend_variables(BackendParameters *param, Port *port, param->ProcStructLock = ProcStructLock; param->ProcGlobal = ProcGlobal; param->AuxiliaryProcs = AuxiliaryProcs; + param->PreparedXactProcs = PreparedXactProcs; param->PMSignalState = PMSignalState; if (!write_inheritable_socket(¶m->pgStatSock, pgStatSock, childPid)) return false; @@ -4947,6 +4949,7 @@ restore_backend_variables(BackendParameters *param, Port *port) ProcStructLock = param->ProcStructLock; ProcGlobal = param->ProcGlobal; AuxiliaryProcs = param->AuxiliaryProcs; + PreparedXactProcs = param->PreparedXactProcs; PMSignalState = param->PMSignalState; read_inheritable_socket(&pgStatSock, ¶m->pgStatSock); |