Re: Pinning a buffer in TupleTableSlot is unnecessary - Mailing list pgsql-hackers

From Greg Stark
Subject Re: Pinning a buffer in TupleTableSlot is unnecessary
Date
Msg-id CAM-w4HMHProUzneV4UoRC2N1koLsNw_LqQoLjqY4EYdajxvigg@mail.gmail.com
Whole thread Raw
In response to Pinning a buffer in TupleTableSlot is unnecessary  (Heikki Linnakangas <hlinnaka@iki.fi>)
Responses Re: Pinning a buffer in TupleTableSlot is unnecessary  (Andres Freund <andres@anarazel.de>)
List pgsql-hackers
On Tue, Aug 30, 2016 at 11:12 AM, Heikki Linnakangas <hlinnaka@iki.fi> wrote:
> While profiling some queries and looking at executor overhead, I realized
> that we're not making much use of TupleTableSlot's ability to hold a buffer
> pin. In a SeqScan, the buffer is held pinned by the underlying heap-scan
> anyway. Same with an IndexScan, and the SampleScan. The only thing that
> relies on that feature is TidScan, but we could easily teach TidScan to hold
> the buffer pin directly.
>
> So, how about we remove the ability of a TupleTableSlot to hold a buffer
> pin, per the attached patch? It shaves a few cycles from a ExecStoreTuple()
> and ExecClearTuple(), which get called a lot. I couldn't measure any actual
> difference from that, though, but it seems like a good idea from a
> readability point of view, anyway.

Out of curiosity why go in this direction and not the other? Why not
move those other scans to use the TupleTableSlot API to manage the
pins. Offhand it sounds more readable not less to have the
TupleTableSlot be a self contained data structure that guarantees the
lifetime of the pins matches the slots rather than have a dependency
on the code structure in some far-away scan.


-- 
greg



pgsql-hackers by date:

Previous
From: Andres Freund
Date:
Subject: Re: sequences and pg_upgrade
Next
From: Andres Freund
Date:
Subject: Re: Pinning a buffer in TupleTableSlot is unnecessary