]> granicus.if.org Git - postgresql/commitdiff
Allow background writing to be shut down by setting limit values to zero.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 17 Oct 2004 22:01:51 +0000 (22:01 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 17 Oct 2004 22:01:51 +0000 (22:01 +0000)
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.

doc/src/sgml/runtime.sgml
src/backend/storage/buffer/bufmgr.c
src/backend/utils/misc/guc.c
src/backend/utils/misc/postgresql.conf.sample

index f82fbc877def92e787b15238d52547f65d4bb9f0..b4a84616f54ac08e3a191174f116dad70a7419f9 100644 (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>
 
index b9d8fc3ad53d06746d5f7071732f949422660771..c96c635d0a6c67b2bac466b9f46c159ac1d571aa 100644 (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
index 5f3ac94bd50a0fcc3602984a6deb8638b09aec79..5b5a2a309f648cd5b55307383326400a65982280 100644 (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
        },
 
        {
index 59004a73c058d1f89801b9fb674a117b74fd60ff..3aed76a411ee03c153390345a56d69562370f696 100644 (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
 
 
 #---------------------------------------------------------------------------