Обсуждение: Eliminate more detoast copies for packed varlenas

Поиск
Список
Период
Сортировка

Eliminate more detoast copies for packed varlenas

От
Gregory Stark
Дата:
Ok, this removes what should be most if not all of the call sites where we're
detoasting text or byteas. In particular it gets all the regexp/like functions
and all the trim/pad functions. It also gets hashtext and hash_any.


$ zcat packed-varlena-efficiency_v0.patch.gz | diffstat
 backend/access/hash/hashfunc.c    |   12 !!
 backend/utils/adt/like.c          |   80 !!!!!!!!!!!!!!!!!!!
 backend/utils/adt/oracle_compat.c |  157 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 backend/utils/adt/regexp.c        |  119 !!!!!!!!!!!!!!!!!!!!!!!!!!!!
 include/fmgr.h                    |    1
 5 files changed, 5 insertions(+), 364 modifications(!)


--
  Gregory Stark
  EnterpriseDB          http://www.enterprisedb.com

Вложения

Re: Eliminate more detoast copies for packed varlenas

От
Tom Lane
Дата:
Gregory Stark <stark@enterprisedb.com> writes:
> Ok, this removes what should be most if not all of the call sites where we're
> detoasting text or byteas. In particular it gets all the regexp/like functions
> and all the trim/pad functions. It also gets hashtext and hash_any.

Applied with some fixes --- you'd missed like_match.c, which doubtless
explains Guillame's complaint that it didn't work ...

            regards, tom lane

Re: Eliminate more detoast copies for packed varlenas

От
"Brendan Jurd"
Дата:
On 9/22/07, Gregory Stark <stark@enterprisedb.com> wrote:
> Ok, this removes what should be most if not all of the call sites where we're
> detoasting text or byteas. In particular it gets all the regexp/like functions
> and all the trim/pad functions. It also gets hashtext and hash_any.

Looks like there's some more of this in src/tutorial/funcs.c and funcs_new.c.

On a related note, while I was trawling through header files trying to
wrap my head around all this toast and varlena business, I found the
following comment, in fmgr.h and reiterated in postgres.h:

<>
WARNING: It is only safe to use PG_DETOAST_DATUM_UNPACKED() and
VARDATA_ANY() if you really don't care about the alignment.
</>

Shouldn't this be PG_DETOAST_DATUM_PACKED()?  I'm emboldened by the
fact that there is no macro called PG_TOAST_DATUM_UNPACKED defined
anywhere in postgres.

Patch attached, in case I've got the right idea.

Regards,
BJ

Вложения

Re: Eliminate more detoast copies for packed varlenas

От
Tom Lane
Дата:
"Brendan Jurd" <direvus@gmail.com> writes:
> On 9/22/07, Gregory Stark <stark@enterprisedb.com> wrote:
>> Ok, this removes what should be most if not all of the call sites where we're
>> detoasting text or byteas. In particular it gets all the regexp/like functions
>> and all the trim/pad functions. It also gets hashtext and hash_any.

> Looks like there's some more of this in src/tutorial/funcs.c and funcs_new.c.

Well, those are just tutorial code, so I'd vote for keeping it simple.

> On a related note, while I was trawling through header files trying to
> wrap my head around all this toast and varlena business, I found the
> following comment, in fmgr.h and reiterated in postgres.h:
> WARNING: It is only safe to use PG_DETOAST_DATUM_UNPACKED() and
> VARDATA_ANY() if you really don't care about the alignment.
> Shouldn't this be PG_DETOAST_DATUM_PACKED()?

Yup, good catch.  In the context of fmgr.h, it seems like the comment
is more sensible if it refers to the underlying function
pg_detoast_datum_packed (which is what the preceding paragraph is
speaking of), so I made it say that instead.

            regards, tom lane