Re: Cache last known per-tuple offsets to speed long tuple

From: a_ogawa <a_ogawa(at)hi-ho(dot)ne(dot)jp>
To: "Tom Lane" <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-patches(at)postgresql(dot)org
Subject: Re: Cache last known per-tuple offsets to speed long tuple
Date: 2004-11-01 14:25:18
Message-ID: PIEMIKOOMKNIJLLLBCBBAEMFCCAA.a_ogawa@hi-ho.ne.jp
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches


I remaked patch for "Cache last known per-tuple offsets to speed
long tuple access" that is in TODO list.

The point of this patch is as follows:
(1)Add fields to TupleTableSlot and TupleTableData.
This fields are for holding the tuple disassembly information.

(2)Add the codes which initializes/cleans new fields.
These codes are added to execTuples.c.

(3)Add two functions to execQual.c.
This function name is slot_deformtuple and this is
just like heap_deformtuple. This function can be resumed
from the previous execution using the information
encapsulated in the TupleTableSlot.

Another function is just like heap_getattr and fast_getattr.
This function name is slot_getattr. This is just like
heap_getattr and fast_getattr macro, except it is given a
TupleTableSlot, and this function uses slot_deformtuple
insetead of nocachegetattr.

(4)ExecEvalVar uses new function slot_getattr instead of
heap_getattr.

I executed the test below.
-------------------
Table has 16,384tuples, 200columns. All data type is text.
Table name is aaa. Column name is t001...t200.
Executed SQL is,
select t100, t110, t120, t130, t140, t150,
t160, t170, t180, t190, t200
from aaa;

The profile result of original code is as follows.
-------------------
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls s/call s/call name
74.19 1.38 1.38 163846 0.00 0.00 nocachegetattr
4.30 1.46 0.08 163840 0.00 0.00 FunctionCall3
1.61 1.49 0.03 397750 0.00 0.00 AllocSetFreeIndex
1.61 1.52 0.03 16384 0.00 0.00 ExecTargetList
1.08 1.54 0.02 344152 0.00 0.00 appendBinaryStringInfo

The profile result after the patch applying is as follows.
-------------------
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
30.38 0.24 0.24 163840 0.00 0.00 slot_deformtuple
10.13 0.32 0.08 163840 0.00 0.00 FunctionCall3
5.06 0.36 0.04 163840 0.00 0.00 slot_getattr
5.06 0.40 0.04 16384 0.00 0.00 heap_deformtuple
3.80 0.43 0.03 49159 0.00 0.00 ExecClearTuple

regards,

--- Atsushi Ogawa
a_ogawa(at)hi-ho(dot)ne(dot)jp

Attachment Content-Type Size
ExecEvalVar.patch application/octet-stream 12.9 KB

In response to

Responses

Browse pgsql-patches by date

  From Date Subject
Next Message Magnus Hagander 2004-11-01 19:06:55 Re: [HACKERS] make check error on -HEAD
Previous Message Thomas Hallgren 2004-11-01 12:40:12 Re: Problems using pgxs on Win32