"Kevin Grittner" <kevin.gritt...@wicourts.gov> writes:
> Tom Lane <t...@sss.pgh.pa.us> wrote:
>> "Todd A. Cook" <tc...@blackducksoftware.com> writes:
>>> I've noticed that on 8.4.0, commits can take a long time when a
>>> temp table is repeatedly filled and truncated within a loop.
 
>> The commit time doesn't seem tremendously out of line, but it looks
>> like there's something O(N^2)-ish in the function execution.  Do
>> you see a similar pattern?  With so many temp files there could well
>> be some blame on the kernel side.  (This is a Fedora 10 box.)
 
> This sounds very similar to my experience here:
> http://archives.postgresql.org/pgsql-hackers/2008-11/msg01472.php

I did some more poking with oprofile, and got this:

samples  %        image name               symbol name
559375   39.9848  postgres                 index_getnext
167626   11.9821  postgres                 TransactionIdIsCurrentTransactionId
107421    7.6786  postgres                 HeapTupleSatisfiesNow
65689     4.6955  postgres                 HeapTupleHeaderGetCmin
47220     3.3753  postgres                 HeapTupleHeaderGetCmax
46799     3.3452  postgres                 hash_search_with_hash_value
29331     2.0966  postgres                 heap_hot_search_buffer
23737     1.6967  postgres                 CatalogCacheFlushRelation
20562     1.4698  postgres                 LWLockAcquire
19838     1.4180  postgres                 heap_page_prune_opt
19044     1.3613  postgres                 _bt_checkkeys
17400     1.2438  postgres                 LWLockRelease
12993     0.9288  postgres                 PinBuffer

So what I'm seeing is entirely explained by the buildup of dead versions
of the temp table's pg_class row --- the index_getnext time is spent
scanning over dead HOT-chain members.  It might be possible to avoid
that by special-casing temp tables in TRUNCATE to recycle the existing
file instead of assigning a new one.  However, there is no reason to
think that 8.3 would be any better than 8.4 on that score.  Also, I'm
not seeing the very long CPU-bound commit phase that Todd is seeing.
So I think there's something happening on his box that's different from
what I'm measuring.

I'm actually testing CVS HEAD, not 8.4.0, but I don't recall that we've
done anything in the past month that would be likely to affect this ...

                        regards, tom lane

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

Reply via email to