Re: Single client performance on trivial SELECTs - Mailing list pgsql-hackers
From | Tom Lane |
---|---|
Subject | Re: Single client performance on trivial SELECTs |
Date | |
Msg-id | 13699.1302792196@sss.pgh.pa.us Whole thread Raw |
In response to | Single client performance on trivial SELECTs (Greg Smith <greg@2ndquadrant.com>) |
Responses |
Re: Single client performance on trivial SELECTs
Re: Single client performance on trivial SELECTs Re: Single client performance on trivial SELECTs Re: Single client performance on trivial SELECTs |
List | pgsql-hackers |
Greg Smith <greg@2ndquadrant.com> writes: > samples % image name symbol name > 53548 6.7609 postgres AllocSetAlloc > 32787 4.1396 postgres MemoryContextAllocZeroAligned > 26330 3.3244 postgres base_yyparse > 21723 2.7427 postgres hash_search_with_hash_value > 20831 2.6301 postgres SearchCatCache > 19094 2.4108 postgres hash_seq_search > 18402 2.3234 postgres hash_any > 15975 2.0170 postgres AllocSetFreeIndex > 14205 1.7935 postgres _bt_compare > 13370 1.6881 postgres core_yylex > 10455 1.3200 postgres MemoryContextAlloc > 10330 1.3042 postgres LockAcquireExtended > 10197 1.2875 postgres ScanKeywordLookup > 9312 1.1757 postgres MemoryContextAllocZero Yeah, this is pretty typical ... > I don't know nearly enough about the memory allocator to comment on > whether it's possible to optimize it better for this case to relieve any > bottleneck. I doubt that it's possible to make AllocSetAlloc radically cheaper. I think the more likely route to improvement there is going to be to find a way to do fewer pallocs. For instance, if we had more rigorous rules about which data structures are read-only to which code, we could probably get rid of a lot of just-in-case tree copying that happens in the parser and planner. But at the same time, even if we could drive all palloc costs to zero, it would only make a 10% difference in this example. And this sort of fairly flat profile is what I see in most cases these days --- we've been playing performance whack-a-mole for long enough now that there isn't much low-hanging fruit left. For better or worse, the system design we've chosen just isn't amenable to minimal overhead for simple queries. I think a lot of this ultimately traces to the extensible, data-type-agnostic design philosophy. The fact that we don't know what an integer is until we look in pg_type, and don't know what an "=" operator does until we look up its properties, is great from a flexibility point of view; but this sort of query is where the costs become obvious. regards, tom lane
pgsql-hackers by date: