Re: queries with DISTINCT / GROUP BY giving different plans

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 16.8.2013 21:36, Tomas Vondra wrote:
>
> Now, the difference between 24 and 56 is caused by hash_agg_entry_size.
> It's called with numAggs=0 but returns 32. I'm wondering if it should
> return 0 in such cases, i.e. something like this:
> 
>     Size
>     hash_agg_entry_size(int numAggs)
>     {
>         Size        entrysize;
> 
>         if (numAggs == 0)
>             return 0;
> 
>         /* This must match build_hash_table */
>         entrysize = sizeof(AggHashEntryData) +
>             (numAggs - 1) * sizeof(AggStatePerGroupData);
>         entrysize = MAXALIGN(entrysize);
>         /* Account for hashtable overhead (assuming fill factor = 1) */
>         entrysize += 3 * sizeof(void *);
>         return entrysize;
>     }
> 
> I've tested that after this both queries use HashAggregate (which is the
> right choice), but I haven't done any extensive checking so maybe I'm
> missing something.

So, is this a sufficient / correct explanation? Any comments about the
fix I suggested? Or should I try to get a permission to provide the data
so that you can reproduce the issue on your own? That might take a few
days to get through.

Tomas


-- 
Sent via pgsql-performance mailing list (pgsql-performance@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance




[Postgresql General]     [Postgresql PHP]     [PHP Users]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Yosemite]

  Powered by Linux