<!--
-$PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.40 2005/12/23 00:38:03 momjian Exp $
+$PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.41 2005/12/27 23:54:01 adunstan Exp $
-->
<chapter Id="runtime-config">
<title>Server Configuration</title>
<listitem>
<para>
Sets the number of shared memory buffers used by the database
- server. The default is typically 1000, but may be less if your
+ server. The default is typically 4000, but may be less if your
kernel settings will not support it (as determined during
<application>initdb</>). Each buffer is 8192 bytes, unless a
different value of <symbol>BLCKSZ</symbol> was chosen when building
Sets the maximum number of disk pages for which free space will
be tracked in the shared free-space map. Six bytes of shared memory
are consumed for each page slot. This setting must be more than
- 16 * <varname>max_fsm_relations</varname>. The default is 20000.
- This option can only be set at server start.
+ 16 * <varname>max_fsm_relations</varname>. The default is 20000,
+ but <application>initdb</> will try to set it as close as possible
+ to 200000, depending on the amount of available memory.
+ This option can only be set at server start.
</para>
</listitem>
</varlistentry>
* Portions Copyright (c) 1994, Regents of the University of California
* Portions taken from FreeBSD.
*
- * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.101 2005/12/09 15:51:14 petere Exp $
+ * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.102 2005/12/27 23:54:01 adunstan Exp $
*
*-------------------------------------------------------------------------
*/
/* defaults */
static int n_connections = 10;
static int n_buffers = 50;
+static int n_fsm_pages = 20000;
/*
* Warning messages for authentication methods
}
}
+/*
+ * max_fsm_pages setting used in both the shared_buffers and max_connections
+ * tests.
+ */
+
+#define TEST_FSM(x) ( (x) > 1000 ? 50 * (x) : 20000 )
+
/*
* check how many connections we can sustain
*/
for (i = 0; i < len; i++)
{
+ int test_buffs = conns[i] * 5;
+ int test_max_fsm = TEST_FSM(test_buffs);
+
snprintf(cmd, sizeof(cmd),
"%s\"%s\" -boot -x0 %s "
+ "-c max_fsm_pages=%d "
"-c shared_buffers=%d -c max_connections=%d template1 "
"< \"%s\" > \"%s\" 2>&1%s",
SYSTEMQUOTE, backend_exec, boot_options,
- conns[i] * 5, conns[i],
+ test_max_fsm,
+ test_buffs, conns[i],
DEVNULL, DEVNULL, SYSTEMQUOTE);
status = system(cmd);
if (status == 0)
test_buffers(void)
{
char cmd[MAXPGPATH];
- static const int bufs[] = {1000, 900, 800, 700, 600, 500,
- 400, 300, 200, 100, 50};
+ static const int bufs[] = {
+ 4000, 3500, 3000, 2500, 2000, 1500,
+ 1000, 900, 800, 700, 600, 500,
+ 400, 300, 200, 100, 50
+ };
static const int len = sizeof(bufs) / sizeof(int);
int i,
- status;
+ status,
+ test_max_fsm_pages;
- printf(_("selecting default shared_buffers ... "));
+ printf(_("selecting default shared_buffers/max_fsm_pages ... "));
fflush(stdout);
for (i = 0; i < len; i++)
{
+ test_max_fsm_pages = TEST_FSM(bufs[i]);
+
snprintf(cmd, sizeof(cmd),
"%s\"%s\" -boot -x0 %s "
+ "-c max_fsm_pages=%d "
"-c shared_buffers=%d -c max_connections=%d template1 "
"< \"%s\" > \"%s\" 2>&1%s",
SYSTEMQUOTE, backend_exec, boot_options,
+ test_max_fsm_pages,
bufs[i], n_connections,
DEVNULL, DEVNULL, SYSTEMQUOTE);
status = system(cmd);
if (i >= len)
i = len - 1;
n_buffers = bufs[i];
+ n_fsm_pages = test_max_fsm_pages;
- printf("%d\n", n_buffers);
+ printf("%d/%d\n", n_buffers, n_fsm_pages);
}
/*
snprintf(repltok, sizeof(repltok), "shared_buffers = %d", n_buffers);
conflines = replace_token(conflines, "#shared_buffers = 1000", repltok);
+ snprintf(repltok, sizeof(repltok), "max_fsm_pages = %d", n_fsm_pages);
+ conflines = replace_token(conflines, "#max_fsm_pages = 20000", repltok);
+
#if DEF_PGPORT != 5432
snprintf(repltok, sizeof(repltok), "#port = %d", DEF_PGPORT);
conflines = replace_token(conflines, "#port = 5432", repltok);