Thread: Re: [BUGS] BUG #5608: array_agg() consumes too much memory

Re: [BUGS] BUG #5608: array_agg() consumes too much memory

From
Itagaki Takahiro
Date:
2010/8/10 Tom Lane <tgl@sss.pgh.pa.us>:
> Eventually it might be nice to have some sort of way to specify the
> estimate to use for any aggregate function --- but for a near-term
> fix maybe we should just hard-wire a special case for array_agg in
> count_agg_clauses_walker().

The attached patch is the near-term fix; it adds ALLOCSET_DEFAULT_INITSIZE
bytes to memory assumption.

We might need the same adjustment for string_agg(), that consumes
1024 bytes for the transit condition. array_agg() and string_agg()
are only aggregates that have "internal" for aggtranstype.

--
Itagaki Takahiro

Attachment

Re: [BUGS] BUG #5608: array_agg() consumes too much memory

From
Hitoshi Harada
Date:
2010/8/14 Itagaki Takahiro <itagaki.takahiro@gmail.com>:
> 2010/8/10 Tom Lane <tgl@sss.pgh.pa.us>:
>> Eventually it might be nice to have some sort of way to specify the
>> estimate to use for any aggregate function --- but for a near-term
>> fix maybe we should just hard-wire a special case for array_agg in
>> count_agg_clauses_walker().
>
> The attached patch is the near-term fix; it adds ALLOCSET_DEFAULT_INITSIZE
> bytes to memory assumption.
>
> We might need the same adjustment for string_agg(), that consumes
> 1024 bytes for the transit condition. array_agg() and string_agg()
> are only aggregates that have "internal" for aggtranstype.

So, is it better to generalize as it adds ALLOCSET_DEFAULT_INITSIZE if
the transtype is internal, rather than specifying individual function
OID as the patch stands?

Regards,

-- 
Hitoshi Harada


Re: [BUGS] BUG #5608: array_agg() consumes too much memory

From
Tom Lane
Date:
Hitoshi Harada <umi.tanuki@gmail.com> writes:
> 2010/8/14 Itagaki Takahiro <itagaki.takahiro@gmail.com>:
>> 2010/8/10 Tom Lane <tgl@sss.pgh.pa.us>:
>>> Eventually it might be nice to have some sort of way to specify the
>>> estimate to use for any aggregate function --- but for a near-term
>>> fix maybe we should just hard-wire a special case for array_agg in
>>> count_agg_clauses_walker().

> So, is it better to generalize as it adds ALLOCSET_DEFAULT_INITSIZE if
> the transtype is internal, rather than specifying individual function
> OID as the patch stands?

Seems like a good idea ... it's ugly, but it seems much less likely to
need maintenance.
        regards, tom lane


Re: [BUGS] BUG #5608: array_agg() consumes too much memory

From
Tom Lane
Date:
Hitoshi Harada <umi.tanuki@gmail.com> writes:
> 2010/8/14 Itagaki Takahiro <itagaki.takahiro@gmail.com>:
>> The attached patch is the near-term fix; it adds ALLOCSET_DEFAULT_INITSIZE
>> bytes to memory assumption.
>> 
>> We might need the same adjustment for string_agg(), that consumes
>> 1024 bytes for the transit condition. array_agg() and string_agg()
>> are only aggregates that have "internal" for aggtranstype.

> So, is it better to generalize as it adds ALLOCSET_DEFAULT_INITSIZE if
> the transtype is internal, rather than specifying individual function
> OID as the patch stands?

I've applied a patch following Hitoshi-san's idea.

BTW, a note about the upthread patch: we don't do manual #define's for
OIDs in pg_proc.h.  Use fmgroids.h for that.
        regards, tom lane