pgsql: Improve scalability of WAL insertions.

Started by Heikki Linnakangasover 12 years ago2 messages
#1Heikki Linnakangas
heikki.linnakangas@iki.fi

Improve scalability of WAL insertions.

This patch replaces WALInsertLock with a number of WAL insertion slots,
allowing multiple backends to insert WAL records to the WAL buffers
concurrently. This is particularly useful for parallel loading large amounts
of data on a system with many CPUs.

This has one user-visible change: switching to a new WAL segment with
pg_switch_xlog() now fills the remaining unused portion of the segment with
zeros. This potentially adds some overhead, but it has been a very common
practice by DBA's to clear the "tail" of the segment with an external
pg_clearxlogtail utility anyway, to make the WAL files compress better.
With this patch, it's no longer necessary to do that.

This patch adds a new GUC, xloginsert_slots, to tune the number of WAL
insertion slots. Performance testing suggests that the default, 8, works
pretty well for all kinds of worklods, but I left the GUC in place to allow
others with different hardware to test that easily. We might want to remove
that before release.

Reviewed by Andres Freund.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/9a20a9b21baa819df1760b36f3c36f25d11fc27b

Modified Files
--------------
src/backend/access/transam/xlog.c | 2111 ++++++++++++++++++++++++++++---------
src/backend/storage/lmgr/spin.c | 2 +
src/backend/utils/misc/guc.c | 11 +
src/include/access/xlog.h | 1 +
src/include/access/xlogdefs.h | 10 -
src/include/storage/lwlock.h | 2 +-
6 files changed, 1641 insertions(+), 496 deletions(-)

--
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers

#2Bruce Momjian
bruce@momjian.us
In reply to: Heikki Linnakangas (#1)
No more need for pg_clearxlogtail?

On Mon, Jul 8, 2013 at 09:16:32AM +0000, Heikki Linnakangas wrote:

This has one user-visible change: switching to a new WAL segment with
pg_switch_xlog() now fills the remaining unused portion of the segment with
zeros. This potentially adds some overhead, but it has been a very common
practice by DBA's to clear the "tail" of the segment with an external
pg_clearxlogtail utility anyway, to make the WAL files compress better.
With this patch, it's no longer necessary to do that.

So this removes the need to add pg_clearxlogtail to contrib? Great.
Thanks.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers