1
0
mirror of https://github.com/postgres/postgres.git synced 2025-04-27 22:56:53 +03:00

Reorganize FAQ entry on performance.

This commit is contained in:
Bruce Momjian 2005-01-31 20:40:46 +00:00
parent 7069a885af
commit 1f7aa643b6
2 changed files with 84 additions and 70 deletions

56
doc/FAQ
View File

@ -1,7 +1,7 @@
Frequently Asked Questions (FAQ) for PostgreSQL Frequently Asked Questions (FAQ) for PostgreSQL
Last updated: Sun Jan 30 21:44:35 EST 2005 Last updated: Mon Jan 31 15:40:24 EST 2005
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us) Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
@ -346,40 +346,40 @@
By default, PostgreSQL only allows connections from the local machine By default, PostgreSQL only allows connections from the local machine
using Unix domain sockets or TCP/IP connections. Other machines will using Unix domain sockets or TCP/IP connections. Other machines will
not be able to connect unless you modify listen_addresses in the not be able to connect unless you modify listen_addresses in the
postgresql.conf and enable host-based authentication by modifying the postgresql.conf file, enable host-based authentication by modifying
file $PGDATA/pg_hba.conf accordingly. the $PGDATA/pg_hba.conf file, and restart the server.
3.3) How do I tune the database engine for better performance? 3.3) How do I tune the database engine for better performance?
Certainly, indexes can speed up queries. The EXPLAIN ANALYZE command There are three major areas for potential performance improvement:
allows you to see how PostgreSQL is interpreting your query, and which
indexes are being used.
If you are doing many INSERTs, consider doing them in a large batch Query Changes
using the COPY command. This is much faster than individual INSERTS. This involves modifying queries to obtain better performance:
Second, statements not in a BEGIN WORK/COMMIT transaction block are
considered to be in their own transaction. Consider performing several
statements in a single transaction block. This reduces the transaction
overhead. Also, consider dropping and recreating indexes when making
large data changes.
There are several tuning options in the Administration Guide/Server + Creation of indexes, including expression and partial indexes
Run-time Environment/Run-time Configuration. You can disable fsync() + Use of COPY instead of multiple INSERTs
by using fsync option. This will prevent fsync()s from flushing to + Grouping of multiple statements into a single transaction to
disk after every transaction. reduce commit overhead
+ Use of CLUSTER when retrieving many rows from an index
+ Use of LIMIT for returning a subset of a query's output
+ Use of Prepared queries
+ Use of ANALYZE to maintain accurate optimizer statistics
+ Regular use of VACUUM or pg_autovacuum
+ Dropping of indexes during large data changes
You can use the shared_buffers option to increase the number of shared Server Configuration
memory buffers used by the backend processes. If you make this A number of postgresql.conf settings affect performance. For
parameter too high, the postmaster may not start because you have more details, see Administration Guide/Server Run-time
exceeded your kernel's limit on shared memory space. Each buffer is 8K Environment/Run-time Configuration for a full listing, and for
and the default is 1000 buffers. commentary see
http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co
nf_e.html and
http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
You can also use the sort_mem (from PostgreSQL 8.0: work_mem) options Hardware Selection
to increase the maximum amount of memory used by the backend processes The effect of hardware on performance is detailed in
for each temporary sort. The default is 1024 (i.e. 1MB). http://candle.pha.pa.us/main/writings/pgsql/hw_performance/inde
x.html.
You can also use the CLUSTER command to group data in tables to match
an index. See the CLUSTER manual page for more details.
3.4) What debugging features are available? 3.4) What debugging features are available?

View File

@ -10,7 +10,7 @@
alink="#0000ff"> alink="#0000ff">
<H1>Frequently Asked Questions (FAQ) for PostgreSQL</H1> <H1>Frequently Asked Questions (FAQ) for PostgreSQL</H1>
<P>Last updated: Sun Jan 30 21:44:35 EST 2005</P> <P>Last updated: Mon Jan 31 15:40:24 EST 2005</P>
<P>Current maintainer: Bruce Momjian (<A href= <P>Current maintainer: Bruce Momjian (<A href=
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>) "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)
@ -428,8 +428,8 @@
RHDB Admin (<a RHDB Admin (<a
href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhd href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhd
b/ </a>), TORA (<a b/ </a>), TORA (<a
href="http://www.globecom.net/tora/">http://www.globecom.net/tora/</ href="http://www.globecom.net/tora/">http://www.globecom.net/tora/</a>,
a>, partly commercial), and Rekall (<a partly commercial), and Rekall (<a
href="http://www.rekallrevealed.org/"> href="http://www.rekallrevealed.org/">
http://www.rekallrevealed.org/</a>). There is also PhpPgAdmin (<a http://www.rekallrevealed.org/</a>). There is also PhpPgAdmin (<a
href="http://phppgadmin.sourceforge.net/"> href="http://phppgadmin.sourceforge.net/">
@ -457,48 +457,64 @@
<P>By default, PostgreSQL only allows connections from the local <P>By default, PostgreSQL only allows connections from the local
machine using Unix domain sockets or TCP/IP connections. Other machine using Unix domain sockets or TCP/IP connections. Other
machines will not be able to connect unless you modify machines will not be able to connect unless you modify
listen_addresses in the postgresql.conf <B>and</B> enable <I>listen_addresses</I> in the <I>postgresql.conf</I> file, enable
host-based authentication by modifying the file host-based authentication by modifying the
<I>$PGDATA/pg_hba.conf</I> accordingly.</P> <I>$PGDATA/pg_hba.conf</I> file, and restart the server.</P>
<H4><A name="3.3">3.3</A>) How do I tune the database engine for <H4><A name="3.3">3.3</A>) How do I tune the database engine for
better performance?</H4> better performance?</H4>
<P>Certainly, indexes can speed up queries. The <P>There are three major areas for potential performance
<SMALL>EXPLAIN ANALYZE</SMALL> command allows you to see how improvement:</P>
PostgreSQL is interpreting your query, and which indexes are
being used.</P>
<P>If you are doing many <SMALL>INSERTs</SMALL>, consider doing <DL>
them in a large batch using the <SMALL>COPY</SMALL> command. This <DT><B>Query Changes</B></DT>
is much faster than individual <SMALL>INSERTS</SMALL>. Second,
statements not in a <SMALL>BEGIN WORK/COMMIT</SMALL> transaction
block are considered to be in their own transaction. Consider
performing several statements in a single transaction block. This
reduces the transaction overhead. Also, consider dropping and
recreating indexes when making large data changes.</P>
<P>There are several tuning options in the <a href= <DD>This involves modifying queries to obtain better
performance:
<ul>
<li>Creation of indexes, including expression and partial
indexes</li>
<li>Use of COPY instead of multiple <SMALL>INSERT</SMALL>s</li>
<li>Grouping of multiple statements into a single transaction to
reduce commit overhead</li>
<li>Use of <SMALL>CLUSTER</SMALL> when retrieving many rows from an
index</li>
<li>Use of <SMALL>LIMIT</SMALL> for returning a subset of a query's
output</li>
<li>Use of Prepared queries</li>
<li>Use of <SMALL>ANALYZE</SMALL> to maintain accurate optimizer
statistics</li>
<li>Regular use of <SMALL>VACUUM</SMALL> or <I>pg_autovacuum</I>
<li>Dropping of indexes during large data changes</li>
</ul><BR>
<BR>
</DD>
<DT><B>Server Configuration</B></DT>
<DD>A number of <I>postgresql.conf</I> settings affect performance.
For more details, see <a href=
"http://www.postgresql.org/docs/current/static/runtime.html"> "http://www.postgresql.org/docs/current/static/runtime.html">
Administration Guide/Server Run-time Environment/Run-time Configuration</a>. Administration Guide/Server Run-time Environment/Run-time
You can disable <I>fsync()</I> by using <i>fsync</I> option. This will Configuration</a> for a full listing, and for commentary see <a
prevent <I>fsync()</I>s from flushing to disk after every href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">
transaction.</P> http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a>
and <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">
http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>.
<BR>
<BR>
</DD>
<P>You can use the <I>shared_buffers</I> option to <DT><B>Hardware Selection</B></DT>
increase the number of shared memory buffers used by the backend
processes. If you make this parameter too high, the
<I>postmaster</I> may not start because you have exceeded your
kernel's limit on shared memory space. Each buffer is 8K and the
default is 1000 buffers.</P>
<P>You can also use the <I>sort_mem</I> (from PostgreSQL 8.0: <I>work_mem</I>) <DD>The effect of hardware on performance is detailed in <a
options to increase the maximum amount of memory used by the backend href="http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html">
processes for each temporary sort. The default is 1024 (i.e. 1MB).</P> http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html</a>.
<BR>
<P>You can also use the <SMALL>CLUSTER</SMALL> command to group <BR>
data in tables to match an index. See the <SMALL>CLUSTER</SMALL> </DD>
manual page for more details.</P> </DL>
<H4><A name="3.4">3.4</A>) What debugging features are <H4><A name="3.4">3.4</A>) What debugging features are
available?</H4> available?</H4>
@ -1196,5 +1212,3 @@ BYTEA bytea variable-length byte array (null-byte safe)
compiler compute the dependencies automatically.</P> compiler compute the dependencies automatically.</P>
</BODY> </BODY>
</HTML> </HTML>