Re: WIP: avoiding tuple construction/deconstruction overhead - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: WIP: avoiding tuple construction/deconstruction overhead
Date
Msg-id 200503181719.j2IHJCY12519@candle.pha.pa.us
Whole thread Raw
In response to Re: WIP: avoiding tuple construction/deconstruction overhead  (a_ogawa <a_ogawa@hi-ho.ne.jp>)
List pgsql-patches
I am very excited there has been so much reduction in tuple processing
overhead in the past few weeks.  This is always and area I thought
needed improvement, and its great to see it.

We will certainly have some big performance improvements in 8.1 because
we already have several (e.g. SMP) and we have many more months to go.

---------------------------------------------------------------------------

a_ogawa wrote:
>
> Tom Lane wrote:
> > a_ogawa <a_ogawa@hi-ho.ne.jp> writes:
> > > (1)We can improve compare_heap() by using TableTupleSlot instead of
> > > HeapTuple. Please see attached patch.
> >
> > Did you measure any performance improvement from that?  I considered it
> > but thought it would likely be a wash or a loss, because in most cases
> > only one attribute will be pulled from a tuple during comparetup_heap.
> > slot_getattr cannot improve on heap_getattr in that case, and is quite
> > likely to be slower.
>
> I measured performance of heap_getattr and slot_getattr in
> comparetup_heap.
>
> I made the table which had ten varchar attributes, and registered
> data for tests.  (Attached file includes SQL doing this.)
> I carried out the following tests.
>
> (case 1)
>  test1: select * from sort_test order by v1 limit 100;
>  test2: select * from sort_test order by v1, v2 limit 100;
>  test3: select * from sort_test order by v1, v2, v3 limit 100;
>  test4: select * from sort_test order by v1, v2, v3, v4 limit 100;
>  test5: select * from sort_test order by v1, v2, v3, v4, v5 limit 100;
>
>  result:        test1    test2    test3    test4    test5
> -----------------------------------------------------------------------
>  heap_getattr  2.149s   2.602s   3.204s   3.830s   4.159s
>  slot_getattr  2.523s   3.422s   3.977s   4.453s   4.721s
>
> (case 2)
>  test1: select * from sort_test order by v10 limit 100;
>  test2: select * from sort_test order by v10, v9 limit 100;
>  test3: select * from sort_test order by v10, v9, v8 limit 100;
>  test4: select * from sort_test order by v10, v9, v8, v7 limit 100;
>  test5: select * from sort_test order by v10, v9, v8, v7, v6 limit 100;
>
>  result:        test1    test2    test3    test4    test5
> -----------------------------------------------------------------------
>  heap_getattr  3.654s   5.549s   6.575s   7.367s   7.870s
>  slot_getattr  4.027s   4.930s   5.249s   5.555s   5.756s
>
> (case 3)
>  test1: select * from sort_test order by v5 limit 100;
>  test2: select * from sort_test order by v5, v6 limit 100;
>  test3: select * from sort_test order by v5, v6, v7 limit 100;
>  test4: select * from sort_test order by v5, v6, v7, v8 limit 100;
>  test5: select * from sort_test order by v5, v6, v7, v8, v9 limit 100;
>
>  result:        test1    test2    test3    test4    test5
> -----------------------------------------------------------------------
>  heap_getattr  2.657s   4.207s   5.194s   6.179s  6.662s
>  slot_getattr  3.126s   4.233s   4.806s   5.271s  5.557s
>
> In most cases, heap_getattr is fast.
> When the following conditions occurred, slot_getattr is fast.
>  (1)Tuple have varlen attributes.
>  (2)Sort key have more than two attributes.
>  (3)A position of a sort key is far from the head of tuple.
>  (4)As for the data of a sort key, there be many repetition.
> Actually it will be rare that these conditions are occurred.
>
> Thinking from a result, I think that we had better continue using
> heap_getattr in comparetup_heap.
>
> regards,
>
> --- Atsushi Ogawa

[ Attachment, skipping... ]

>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

pgsql-patches by date:

Previous
From: a_ogawa
Date:
Subject: Re: WIP: avoiding tuple construction/deconstruction overhead
Next
From: Alvaro Herrera
Date:
Subject: Re: Shared dependency patch