diff options
author | Tom Lane | 2005-03-04 20:21:07 +0000 |
---|---|---|
committer | Tom Lane | 2005-03-04 20:21:07 +0000 |
commit | 5d5087363d7cdbd00fc432a1216e83a00f7139bd (patch) | |
tree | 56492be3beb9be188f37bfa68c9bfc0e35b0961c /doc/src | |
parent | 5592a6cf46d60187b6f4895d2144e67d4f54fa25 (diff) |
Replace the BufMgrLock with separate locks on the lookup hashtable and
the freelist, plus per-buffer spinlocks that protect access to individual
shared buffer headers. This requires abandoning a global freelist (since
the freelist is a global contention point), which shoots down ARC and 2Q
as well as plain LRU management. Adopt a clock sweep algorithm instead.
Preliminary results show substantial improvement in multi-backend situations.
Diffstat (limited to 'doc/src')
-rw-r--r-- | doc/src/sgml/runtime.sgml | 107 |
1 files changed, 71 insertions, 36 deletions
diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml index 63442bb38b8..5ba8b9b2b3c 100644 --- a/doc/src/sgml/runtime.sgml +++ b/doc/src/sgml/runtime.sgml @@ -1,5 +1,5 @@ <!-- -$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.306 2005/03/02 19:58:54 tgl Exp $ +$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.307 2005/03/04 20:21:05 tgl Exp $ --> <chapter Id="runtime"> @@ -1379,9 +1379,7 @@ SET ENABLE_SEQSCAN TO OFF; Specifies the delay between activity rounds for the background writer. In each round the writer issues writes for some number of dirty buffers (controllable by the - following parameters). The selected buffers will always be - the least recently used ones among the currently dirty - buffers. It then sleeps for <varname>bgwriter_delay</> + following parameters). It then sleeps for <varname>bgwriter_delay</> milliseconds, and repeats. The default value is 200. Note that on many systems, the effective resolution of sleep delays is 10 milliseconds; setting <varname>bgwriter_delay</> @@ -1393,32 +1391,77 @@ SET ENABLE_SEQSCAN TO OFF; </listitem> </varlistentry> - <varlistentry id="guc-bgwriter-percent" xreflabel="bgwriter_percent"> - <term><varname>bgwriter_percent</varname> (<type>integer</type>)</term> + <varlistentry id="guc-bgwriter-lru-percent" xreflabel="bgwriter_lru_percent"> + <term><varname>bgwriter_lru_percent</varname> (<type>floating point</type>)</term> <indexterm> - <primary><varname>bgwriter_percent</> configuration parameter</primary> + <primary><varname>bgwriter_lru_percent</> configuration parameter</primary> </indexterm> <listitem> <para> - In each round, no more than this percentage of the currently - dirty buffers will be written (rounding up any fraction to - the next whole number of buffers). The default value is - 1. This option can only be set at server start or in the + To reduce the probability that server processes will need to issue + their own writes, the background writer tries to write buffers that + are likely to be recycled soon. In each round, it examines up to + <varname>bgwriter_lru_percent</> of the buffers that are nearest to + being recycled, and writes any that are dirty. + The default value is 1.0 (this is a percentage of the total number + of shared buffers). + This option can only be set at server start or in the + <filename>postgresql.conf</filename> file. + </para> + </listitem> + </varlistentry> + + <varlistentry id="guc-bgwriter-lru-maxpages" xreflabel="bgwriter_lru_maxpages"> + <term><varname>bgwriter_lru_maxpages</varname> (<type>integer</type>)</term> + <indexterm> + <primary><varname>bgwriter_lru_maxpages</> configuration parameter</primary> + </indexterm> + <listitem> + <para> + In each round, no more than this many buffers will be written + as a result of scanning soon-to-be-recycled buffers. + The default value is 5. + This option can only be set at server start or in the + <filename>postgresql.conf</filename> file. + </para> + </listitem> + </varlistentry> + + <varlistentry id="guc-bgwriter-all-percent" xreflabel="bgwriter_all_percent"> + <term><varname>bgwriter_all_percent</varname> (<type>floating point</type>)</term> + <indexterm> + <primary><varname>bgwriter_all_percent</> configuration parameter</primary> + </indexterm> + <listitem> + <para> + To reduce the amount of work that will be needed at checkpoint time, + the background writer also does a circular scan through the entire + buffer pool, writing buffers that are found to be dirty. + In each round, it examines up to + <varname>bgwriter_all_percent</> of the buffers for this purpose. + The default value is 0.333 (this is a percentage of the total number + of shared buffers). With the default <varname>bgwriter_delay</> + setting, this will allow the entire shared buffer pool to be scanned + about once per minute. + This option can only be set at server start or in the <filename>postgresql.conf</filename> file. </para> </listitem> </varlistentry> - <varlistentry id="guc-bgwriter-maxpages" xreflabel="bgwriter_maxpages"> - <term><varname>bgwriter_maxpages</varname> (<type>integer</type>)</term> + <varlistentry id="guc-bgwriter-all-maxpages" xreflabel="bgwriter_all_maxpages"> + <term><varname>bgwriter_all_maxpages</varname> (<type>integer</type>)</term> <indexterm> - <primary><varname>bgwriter_maxpages</> configuration parameter</primary> + <primary><varname>bgwriter_all_maxpages</> configuration parameter</primary> </indexterm> <listitem> <para> - In each round, no more than this many dirty buffers will be - written. The default value is 100. This option can only be - set at server start or in the + In each round, no more than this many buffers will be written + as a result of the scan of the entire buffer pool. (If this + limit is reached, the scan stops, and resumes at the next buffer + during the next round.) + The default value is 5. + This option can only be set at server start or in the <filename>postgresql.conf</filename> file. </para> </listitem> @@ -1426,13 +1469,19 @@ SET ENABLE_SEQSCAN TO OFF; </variablelist> <para> - Smaller values of <varname>bgwriter_percent</varname> and - <varname>bgwriter_maxpages</varname> reduce the extra I/O load + Smaller values of <varname>bgwriter_all_percent</varname> and + <varname>bgwriter_all_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. To disable background writing entirely, - set <varname>bgwriter_percent</varname> and/or - <varname>bgwriter_maxpages</varname> to zero. + increase these two values. + Similarly, smaller values of <varname>bgwriter_lru_percent</varname> and + <varname>bgwriter_lru_maxpages</varname> reduce the extra I/O load + caused by the background writer, but make it more likely that server + processes will have to issue writes for themselves, delaying interactive + queries. + To disable background writing entirely, + set both <varname>maxpages</varname> values and/or both + <varname>percent</varname> values to zero. </para> </sect3> @@ -3866,20 +3915,6 @@ plruby.bar = true # generates error, unknown class name </listitem> </varlistentry> - <varlistentry id="guc-debug-shared-buffers" xreflabel="debug_shared_buffers"> - <term><varname>debug_shared_buffers</varname> (<type>integer</type>)</term> - <indexterm> - <primary><varname>debug_shared_buffers</> configuration parameter</primary> - </indexterm> - <listitem> - <para> - Number of seconds between ARC reports. - If set greater than zero, emit ARC statistics to the log every so many - seconds. Zero (the default) disables reporting. - </para> - </listitem> - </varlistentry> - <varlistentry id="guc-pre-auth-delay" xreflabel="pre_auth_delay"> <term><varname>pre_auth_delay</varname> (<type>integer</type>)</term> <indexterm> |