diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2017-04-07 18:54:26 -0300 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2017-04-07 19:08:43 -0300 |
commit | 8bf74967dab1b368f4e217c960ede1516c42a989 (patch) | |
tree | 61090aa24b2761d6f731b5a56d769cb94961d35b /src/include/access/brin_tuple.h | |
parent | e8fdbd58fe564a29977f4331cd26f9697d76fc40 (diff) | |
download | postgresql-8bf74967dab1b368f4e217c960ede1516c42a989.tar.gz postgresql-8bf74967dab1b368f4e217c960ede1516c42a989.zip |
Reduce the number of pallocs() in BRIN
Instead of allocating memory in brin_deform_tuple and brin_copy_tuple
over and over during a scan, allow reuse of previously allocated memory.
This is said to make for a measurable performance improvement.
Author: Jinyu Zhang, Álvaro Herrera
Reviewed by: Tomas Vondra
Discussion: https://postgr.es/m/495deb78.4186.1500dacaa63.Coremail.beijing_pg@163.com
Diffstat (limited to 'src/include/access/brin_tuple.h')
-rw-r--r-- | src/include/access/brin_tuple.h | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/include/access/brin_tuple.h b/src/include/access/brin_tuple.h index 6927865182c..b042fa8d50b 100644 --- a/src/include/access/brin_tuple.h +++ b/src/include/access/brin_tuple.h @@ -38,6 +38,11 @@ typedef struct BrinMemTuple bool bt_placeholder; /* this is a placeholder tuple */ BlockNumber bt_blkno; /* heap blkno that the tuple is for */ MemoryContext bt_context; /* memcxt holding the bt_columns values */ + /* output arrays for brin_deform_tuple: */ + Datum *bt_values; /* values array */ + bool *bt_allnulls; /* allnulls array */ + bool *bt_hasnulls; /* hasnulls array */ + /* not an output array, but must be last */ BrinValues bt_columns[FLEXIBLE_ARRAY_MEMBER]; } BrinMemTuple; @@ -83,14 +88,15 @@ extern BrinTuple *brin_form_tuple(BrinDesc *brdesc, BlockNumber blkno, extern BrinTuple *brin_form_placeholder_tuple(BrinDesc *brdesc, BlockNumber blkno, Size *size); extern void brin_free_tuple(BrinTuple *tuple); -extern BrinTuple *brin_copy_tuple(BrinTuple *tuple, Size len); +extern BrinTuple *brin_copy_tuple(BrinTuple *tuple, Size len, + BrinTuple *dest, Size *destsz); extern bool brin_tuples_equal(const BrinTuple *a, Size alen, const BrinTuple *b, Size blen); extern BrinMemTuple *brin_new_memtuple(BrinDesc *brdesc); -extern void brin_memtuple_initialize(BrinMemTuple *dtuple, +extern BrinMemTuple *brin_memtuple_initialize(BrinMemTuple *dtuple, BrinDesc *brdesc); extern BrinMemTuple *brin_deform_tuple(BrinDesc *brdesc, - BrinTuple *tuple); + BrinTuple *tuple, BrinMemTuple *dMemtuple); #endif /* BRIN_TUPLE_H */ |