Обсуждение: Eliminate more detoast copies for packed varlenas
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
Вложения
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
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
Вложения
"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