Hi,
I was toying around with idea of converting all the memory related parameters
in postgresql.conf to kilobytes for simplicity and uniformity.
Attached is a proof of concept patch that converts shared_buffers to kilobytes
using assign_hook.
It compiled all-right but I experienced a strange behavior. At the time of
initdb, it demanded 69MB of shared memory. I had to bump up SHMMAX from 32MB
to 128MB to get initdb through. Certainly I did something wrong somewhere but
I don't know what and where. This is linux 2.6.4.
The postgresql.conf is properly altered and shows 8000(Though the description
around is no longer in sync.)
I also don't know where to put the assign_hook. I have put in guc.c for the
time being. Only other int hook I found was assign_max_stack_depth which is
in postgres.c
Any comments/pointers?
Regards,
Shridhar
*** src/backend/utils/misc/guc.c.orig Sun May 30 17:14:08 2004
--- src/backend/utils/misc/guc.c Sun May 30 18:02:10 2004
***************
*** 106,111 ****
--- 106,112 ----
static bool assign_stage_log_stats(bool newval, bool doit, GucSource source);
static bool assign_log_stats(bool newval, bool doit, GucSource source);
+ static bool assign_shared_buffers(int newval, bool doit, GucSource source);
/*
* Debugging options
***************
*** 967,973 ****
NULL
},
&NBuffers,
! 1000, 16, INT_MAX, NULL, NULL
},
{
--- 968,974 ----
NULL
},
&NBuffers,
! 1000, 16, INT_MAX, assign_shared_buffers, NULL
},
{
***************
*** 5130,5133 ****
--- 5131,5147 ----
}
+ static bool assign_shared_buffers(int newval, bool doit, GucSource source)
+ {
+
+ if(doit)
+ {
+ if(BLCKSZ > 0)
+ NBuffers = (newval*1024)/BLCKSZ;
+ else
+ return(false);
+ }
+
+ return(true);
+ }
#include "guc-file.c"
*** src/bin/initdb/initdb.c.orig Sun May 30 17:26:01 2004
--- src/bin/initdb/initdb.c Sun May 30 17:26:51 2004
***************
*** 886,892 ****
snprintf(repltok, sizeof(repltok), "max_connections = %d", n_connections);
conflines = replace_token(conflines, "#max_connections = 100", repltok);
! snprintf(repltok, sizeof(repltok), "shared_buffers = %d", n_buffers);
conflines = replace_token(conflines, "#shared_buffers = 1000", repltok);
snprintf(repltok, sizeof(repltok), "lc_messages = '%s'", lc_messages);
--- 886,892 ----
snprintf(repltok, sizeof(repltok), "max_connections = %d", n_connections);
conflines = replace_token(conflines, "#max_connections = 100", repltok);
! snprintf(repltok, sizeof(repltok), "shared_buffers = %d", (n_buffers*BLCKSZ)/1024);
conflines = replace_token(conflines, "#shared_buffers = 1000", repltok);
snprintf(repltok, sizeof(repltok), "lc_messages = '%s'", lc_messages);
---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly