Re: COPY locking

From: John Coers <coers(at)intrinsity(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: COPY locking
Date: 2001-05-14 16:19:15
Message-ID: 3B000583.40E911F7@intrinsity.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

I rebuilt with these changes and am seeing a 30-40% improvement in average performance for
my high-contention high-volume copy case. I still need to do some more testing, but this really
seems to help.

Thanks a lot Tom!

Tom Lane wrote:
>
> I have committed some changes into development sources that should
> reduce contention overhead when multiple backends are inserting into the
> same table. If you're interested in trying it out, you could pull the
> latest sources from our CVS server, or try back-patching the changes
> into 7.1.*. The relevant changes are in these files:
>
> 2001-05-12 15:58 tgl
>
> * src/: backend/access/heap/heapam.c, backend/access/heap/hio.c,
> backend/storage/buffer/bufmgr.c, backend/storage/buffer/localbuf.c,
> include/storage/bufmgr.h: Modify RelationGetBufferForTuple() so
> that we only do lseek and lock when we need to move to a new page;
> as long as we can insert the new tuple on the same page as before,
> we only need LockBuffer and not the expensive stuff. Also, twiddle
> bufmgr interfaces to avoid redundant lseeks in
> RelationGetBufferForTuple and BufferAlloc. Successive inserts now
> require one lseek per page added, rather than one per tuple with
> several additional ones at each page boundary as happened before.
> Lock contention when multiple backends are inserting in same table
> is also greatly reduced.
>
> 2001-05-10 16:38 tgl
>
> * src/: backend/commands/sequence.c,
> backend/storage/buffer/bufmgr.c, backend/storage/smgr/md.c,
> backend/storage/smgr/mm.c, backend/storage/smgr/smgr.c,
> include/storage/smgr.h: Avoid unnecessary lseek() calls by cleanups
> in md.c. mdfd_lstbcnt was not being consulted anywhere, so remove
> it and remove the _mdnblocks() calls that were used to set it.
> Change smgrextend interface to pass in the target block number (ie,
> current file length) --- the caller always knows this already,
> having already done smgrnblocks(), so it's silly to do it over
> again inside mdextend. Net result: extension of a file now takes
> one lseek(SEEK_END) and a write(), not three lseeks and a write.
>
> regards, tom lane

--
John Coers Intrinsity, Inc.
coers(at)intrinsity(dot)com Austin, Texas

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Brent R. Matzelle 2001-05-14 16:26:11 New article mentions Postgres...
Previous Message Martín Marqués 2001-05-14 16:16:20 Re: PostgreSQL in Comparison to mySQL