Re: pg9.6 segfault using simple query (related to use fk for join estimates)

Поиск
Список
Период
Сортировка
От Tomas Vondra
Тема Re: pg9.6 segfault using simple query (related to use fk for join estimates)
Дата
Msg-id cede673a-ad64-ed27-8c4d-1186f4e22dae@2ndquadrant.com
обсуждение исходный текст
Ответ на Re: pg9.6 segfault using simple query (related to use fk for join estimates)  (Robert Haas <robertmhaas@gmail.com>)
Список pgsql-hackers
Hi,

On 05/02/2016 09:18 PM, Robert Haas wrote:
> On Sat, Apr 30, 2016 at 1:35 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> Julien Rouhaud <julien.rouhaud@dalibo.com> writes:
>>> On 29/04/2016 18:05, Tom Lane wrote:
>>>> Julien Rouhaud <julien.rouhaud@dalibo.com> writes:
>>>>> The segfault is caused by quals_match_foreign_key() calling get_leftop()
>>>>> and get_rightop() on a ScalarArrayOpExpr node.
>>>>>
>>>>> I'm not sure that assuming this compatibility is the right way to fix
>>>>> this though.
>>
>>>> It certainly isn't.
>>
>>> Agreed. New attached patch handles explicitly each node tag.
>>
>> No, this is completely nuts.  The problem is that quals_match_foreign_key
>> is simply assuming that every clause in the list it's given is an OpExpr,
>> which is quite wrong.  It should just ignore non-OpExpr quals, since it
>> cannot do anything useful with them anyway.  There's a comment claiming
>> that non-OpExpr quals were already rejected:
>>
>>              * Here since 'usefulquals' only contains bitmap indexes for quals
>>              * of type "var op var" we can safely skip checking this.
>>
>> but that doesn't appear to have anything to do with current reality.
>>
>> While this in itself is about a two-line fix, after reviewing
>> 137805f89acb3611 I'm pretty unhappy that it got committed at all.
>> I think this obvious bug is a good sign that it wasn't ready.
>> Other unfinished aspects like invention of an undocumented GUC
>> don't leave a good impression either.
>>
>> Moreover, it looks to me like this will add quite a lot of overhead,
>> probably far more than is justified, because clauselist_join_selectivity
>> is basically O(N^2) in the relation-footprint of the current join --- and
>> not with a real small multiplier, either, as the functions it calls
>> contain about four levels of nested loops themselves.  Maybe that's
>> unmeasurable on trivial test cases but it's going to be disastrous in
>> large queries, or for relations with large numbers of foreign keys.
>>
>> I think this should be reverted and pushed out to 9.7 development.
>> It needs a significant amount of rewriting to fix the performance
>> issue, and now's not the time to be doing that.
>
> If this gets reverted, then probably
> 015e88942aa50f0d419ddac00e63bb06d6e62e86 should also be reverted.

Probably. I think the code is fine / correct, but as the FK estimation 
patch was the only user, there's not much point in keeping it if that 
gets reverted.

regards

-- 
Tomas Vondra                  http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tomas Vondra
Дата:
Сообщение: Re: pg9.6 segfault using simple query (related to use fk for join estimates)
Следующее
От: Craig Ringer
Дата:
Сообщение: Re: Logical decoding timeline following fails to handle records split across segments