Re: Missed bet in toaster routines

Started by Jan Wieckabout 22 years ago2 messageshackers
Jump to latest
#1Jan Wieck
JanWieck@Yahoo.com

Tom Lane wrote:

Wouldn't it be a win for heap_tuple_toast_attrs() to fall out quickly
if the tuple contains no varlena attributes? I'm thinking of adding
a test like

/* Nothing to do if tuple contains no varlena fields */
if ((newtup && !HeapTupleAllFixed(newtup)) ||
(oldtup && !HeapTupleAllFixed(oldtup)))
/* do existing processing */

This is a pretty cheap test (just checking a header flag) and saves lots
of useless scanning when it succeeds.

Why sure it would. That code is quite frequently called.

Jan

--
#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me. #
#================================================== JanWieck@Yahoo.com #

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Jan Wieck (#1)

Jan Wieck <JanWieck@Yahoo.com> writes:

Tom Lane wrote:

Wouldn't it be a win for heap_tuple_toast_attrs() to fall out quickly
if the tuple contains no varlena attributes?

Why sure it would. That code is quite frequently called.

I take it back --- the short-circuit test already exists, but it's at
the call sites rather than in tuptoaster.c.

However, it looks like we can tighten the tests a bit. For instance
heap_delete invokes the toaster if HeapTupleHasExtended, whereas it
seems to me it'd be sufficient to check HasExternal --- we don't care
about deleting compressed-in-line stuff, do we?

regards, tom lane