Allow background writing to be shut down by setting limit values to zero.

This does not disable the bgwriter process: it still has to wake up often
enough to collect fsync requests from backends in a timely fashion.  But
it responds to the recent gripe about not being able to prevent the disk
from being spun up constantly.
This commit is contained in:
Tom Lane 2004-10-17 22:01:51 +00:00
parent bdbe9c9f06
commit 4347cc2392
4 changed files with 20 additions and 12 deletions

View File

@ -1,5 +1,5 @@
<!--
$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.288 2004/10/15 16:50:29 momjian Exp $
$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.289 2004/10/17 22:01:49 tgl Exp $
-->
<Chapter Id="runtime">
@ -1305,7 +1305,9 @@ SET ENABLE_SEQSCAN TO OFF;
<varname>bgwriter_maxpages</varname> reduce the extra I/O load
caused by the background writer, but leave more work to be done
at checkpoint time. To reduce load spikes at checkpoints,
increase the values.
increase the values. To disable background writing entirely,
set <varname>bgwriter_percent</varname> and/or
<varname>bgwriter_maxpages</varname> to zero.
</para>
</sect3>

View File

@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.180 2004/10/16 18:57:23 tgl Exp $
* $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.181 2004/10/17 22:01:50 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -671,8 +671,10 @@ UnpinBuffer(BufferDesc *buf, bool fixOwner)
*
* This is called at checkpoint time to write out all dirty shared buffers,
* and by the background writer process to write out some of the dirty blocks.
* percent/maxpages should be zero in the former case, and nonzero limit
* values in the latter.
* percent/maxpages should be -1 in the former case, and limit values (>= 0)
* in the latter.
*
* Returns the number of buffers written.
*/
int
BufferSync(int percent, int maxpages)
@ -682,6 +684,10 @@ BufferSync(int percent, int maxpages)
int num_buffer_dirty;
int i;
/* If either limit is zero then we are disabled from doing anything... */
if (percent == 0 || maxpages == 0)
return 0;
/*
* Get a list of all currently dirty buffers and how many there are.
* We do not flush buffers that get dirtied after we started. They

View File

@ -10,7 +10,7 @@
* Written by Peter Eisentraut <peter_e@gmx.net>.
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.244 2004/10/16 19:08:38 tgl Exp $
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.245 2004/10/17 22:01:51 tgl Exp $
*
*--------------------------------------------------------------------
*/
@ -1248,7 +1248,7 @@ static struct config_int ConfigureNamesInt[] =
NULL
},
&BgWriterDelay,
200, 10, 5000, NULL, NULL
200, 10, 10000, NULL, NULL
},
{
@ -1257,7 +1257,7 @@ static struct config_int ConfigureNamesInt[] =
NULL
},
&BgWriterPercent,
1, 1, 100, NULL, NULL
1, 0, 100, NULL, NULL
},
{
@ -1266,7 +1266,7 @@ static struct config_int ConfigureNamesInt[] =
NULL
},
&BgWriterMaxPages,
100, 1, 1000, NULL, NULL
100, 0, 1000, NULL, NULL
},
{

View File

@ -98,9 +98,9 @@
# - Background writer -
#bgwriter_delay = 200 # 10-5000 milliseconds
#bgwriter_percent = 1 # 1-100% of dirty buffers
#bgwriter_maxpages = 100 # 1-1000 buffers max at once
#bgwriter_delay = 200 # 10-10000 milliseconds between rounds
#bgwriter_percent = 1 # 0-100% of dirty buffers in each round
#bgwriter_maxpages = 100 # 0-1000 buffers max per round
#---------------------------------------------------------------------------