diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml index e346ece23ca9a0598dbfdff1964eea824700d7a6..3d34835ea158d08d7246af594b2bf9894821d23e 100644 --- a/doc/src/sgml/runtime.sgml +++ b/doc/src/sgml/runtime.sgml @@ -1,5 +1,5 @@ @@ -1161,7 +1161,7 @@ SET ENABLE_SEQSCAN TO OFF; buffers is only a buffer descriptor, or about 64 bytes, per increment in temp_buffers. However if a buffer is actually used an additional 8192 bytes will be consumed for it - (or in general BLCKSZ bytes). + (or in general, BLCKSZ bytes). @@ -1183,6 +1183,14 @@ SET ENABLE_SEQSCAN TO OFF; This option can only be set at server start. + + If you are not using prepared transactions, this parameter may as + well be set to zero. If you are using them, you will probably + want max_prepared_transactions to be at least + as large as , to avoid unwanted + failures at the prepare step. + + Increasing this parameter may cause PostgreSQL to request more System V shared @@ -1267,6 +1275,32 @@ SET ENABLE_SEQSCAN TO OFF; Free Space Map + + free space map + + + + These parameters control the size of the shared free space + map, which tracks the locations of unused space in the database. + An undersized free space map may cause the database to consume + increasing amounts of disk space over time, because free space that + is not in the map cannot be re-used; instead PostgreSQL + will request more disk space from the operating system when it needs + to store new data. + The last few lines displayed by a database-wide VACUUM VERBOSE + command can help in determining if the current settings are adequate. + A NOTICE message is also printed during such an operation + if the current settings are too low. + + + + Increasing these parameters may cause PostgreSQL + to request more System V shared + memory than your operating system's default configuration + allows. See for information on how to + adjust those parameters, if necessary. + + max_fsm_pages (integer) @@ -1279,10 +1313,6 @@ SET ENABLE_SEQSCAN TO OFF; 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 * max_fsm_relations. The default is 20000. - The last few lines of a database-wide VACUUM VERBOSE - can help in determining if the the default setting is suitable. - A NOTICE message is also printed during such an operation - if the current setting is too low. This option can only be set at server start. @@ -1297,12 +1327,8 @@ SET ENABLE_SEQSCAN TO OFF; Sets the maximum number of relations (tables and indexes) for which free space will be tracked in the shared free-space map. Roughly - fifty bytes of shared memory are consumed for each slot. + seventy bytes of shared memory are consumed for each slot. The default is 1000. - The last few lines of a database-wide VACUUM VERBOSE - can help in determining if the the default setting is suitable. - A NOTICE message is also printed during such an operation - if the current setting is too low. This option can only be set at server start. @@ -1804,9 +1830,18 @@ SET ENABLE_SEQSCAN TO OFF; Number of disk-page buffers allocated in shared memory for WAL data. The default is 8. The setting need only be large enough to hold - the amount of WAL data generated by one typical transaction. + the amount of WAL data generated by one typical transaction, since + the data is flushed to disk at every transaction commit. This option can only be set at server start. + + + Increasing this parameter may cause PostgreSQL + to request more System V shared + memory than your operating system's default configuration + allows. See for information on how to + adjust those parameters, if necessary. + @@ -3952,9 +3987,11 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' - The shared lock table is sized on the assumption that at most + The shared lock table is created with room to describe locks on max_locks_per_transaction * - max_connections distinct objects will need to + ( + + ) objects; + hence, no more than this many distinct objects can be locked at any one time. (Thus, this parameter's name may be confusing: it is not a hard limit on the number of locks taken by any one transaction, but rather a maximum average value.) @@ -3963,6 +4000,14 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' have clients that touch many different tables in a single transaction. This option can only be set at server start. + + + Increasing this parameter may cause PostgreSQL + to request more System V shared + memory than your operating system's default configuration + allows. See for information on how to + adjust those parameters, if necessary. + @@ -4653,9 +4698,10 @@ $ postmaster -o '-S 1024 -s' relevant for PostgreSQL). Almost all modern operating systems provide these features, but not all of them have them turned on or sufficiently sized by default, especially systems - with BSD heritage. (For the QNX and - BeOS ports, PostgreSQL - provides its own replacement implementation of these facilities.) + with BSD heritage. (For the Windows, + QNX and BeOS + ports, PostgreSQL provides its own replacement + implementation of these facilities.) @@ -4695,8 +4741,7 @@ $ postmaster -o '-S 1024 -s' SHMMAX Maximum size of shared memory segment (bytes) - 250 kB + 8.2 kB * + - 14.2 kB * up to infinity + at least several megabytes (see text) @@ -4764,14 +4809,17 @@ $ postmaster -o '-S 1024 -s' bytes, of a shared memory segment. If you get an error message from shmget like Invalid argument, it is likely that this limit has been exceeded. The size of the required - shared memory segment varies both with the number of requested - buffers ( @@ -4785,7 +4833,7 @@ $ postmaster -o '-S 1024 -s' Less likely to cause problems is the minimum size for shared memory segments (SHMMIN), which should be at most - approximately 256 kB for PostgreSQL (it is + approximately 500 kB for PostgreSQL (it is usually just 1). The maximum number of segments system-wide (SHMMNI) or per-process (SHMSEG) are unlikely to cause a problem unless your system has them set to zero. @@ -4793,8 +4841,8 @@ $ postmaster -o '-S 1024 -s' PostgreSQL uses one semaphore per allowed connection - ( + @@ -5172,6 +5221,59 @@ set semsys:seminfo_semmsl=32 + + + + Configuration parameters affecting + <productname>PostgreSQL</productname>'s shared memory usage</> + + <tgroup cols="2"> + <thead> + <row> + <entry>Name</> + <entry>Approximate multiplier (bytes per increment)</> + </row> + </thead> + + <tbody> + <row> + <entry><xref linkend="guc-max-connections"></> + <entry>400 (but see also <varname>max_locks_per_transaction</>)</entry> + </row> + + <row> + <entry><xref linkend="guc-max-prepared-transactions"></> + <entry>600 (but see also <varname>max_locks_per_transaction</>)</entry> + </row> + + <row> + <entry><xref linkend="guc-max-locks-per-transaction"></> + <entry>220 * (<xref linkend="guc-max-connections"> + + <xref linkend="guc-max-prepared-transactions">)</> + </row> + + <row> + <entry><xref linkend="guc-shared-buffers"></> + <entry>8300</> + </row> + + <row> + <entry><xref linkend="guc-wal-buffers"></> + <entry>8200</> + </row> + + <row> + <entry><xref linkend="guc-max-fsm-relations"></> + <entry>70</> + </row> + + <row> + <entry><xref linkend="guc-max-fsm-pages"></> + <entry>6</> + </row> + </tbody> + </tgroup> + </table> </sect2> diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 910f0212a87095efc9e86b71b2af5da470720fb6..ac726b7d88997c07927fc79c7c03f147211d7e8d 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -49,11 +49,10 @@ #listen_addresses = 'localhost' # what IP interface(s) to listen on; # defaults to localhost, '*' = any #port = 5432 -#max_connections = 100 # note: increasing max_connections costs - # about 500 bytes of shared memory per - # connection slot, in addition to costs - # from shared_buffers and - # max_locks_per_transaction. +#max_connections = 100 +# note: increasing max_connections costs ~400 bytes of shared memory per +# connection slot, plus lock space (see max_locks_per_transaction). You +# might also need to raise shared_buffers to support more connections. #superuser_reserved_connections = 2 #unix_socket_directory = '' #unix_socket_group = '' @@ -91,6 +90,8 @@ #shared_buffers = 1000 # min 16 or max_connections*2, 8KB each #temp_buffers = 1000 # min 100, 8KB each #max_prepared_transactions = 5 # can be 0 or more +# note: increasing max_prepared_transactions costs ~600 bytes of shared memory +# per transaction slot, plus lock space (see max_locks_per_transaction). #work_mem = 1024 # min 64, size in KB #maintenance_work_mem = 16384 # min 1024, size in KB #max_stack_depth = 2048 # min 100, size in KB @@ -98,7 +99,7 @@ # - Free Space Map - #max_fsm_pages = 20000 # min max_fsm_relations*16, 6 bytes each -#max_fsm_relations = 1000 # min 100, ~50 bytes each +#max_fsm_relations = 1000 # min 100, ~70 bytes each # - Kernel Resource Usage - @@ -396,8 +397,10 @@ #--------------------------------------------------------------------------- #deadlock_timeout = 1000 # in milliseconds -#max_locks_per_transaction = 64 # min 10, ~200*max_connections - # bytes each +#max_locks_per_transaction = 64 # min 10 +# note: each lock table slot uses ~220 bytes of shared memory, and there are +# max_locks_per_transaction * (max_connections + max_prepared_transactions) +# lock table slots. #---------------------------------------------------------------------------