Thanks Justin for pointing this out.
 More work for optimizer for nothing, I will remove it.

On Mon, Dec 9, 2019 at 2:48 PM Justin <zzzzz.g...@gmail.com> wrote:

> Hi Saket
>
> The first filter condition seems to be duplicated   it appears this can be
> simplified from
>
> and ( pdtaltrelt0_.status_typ_dbky=102
>         and ( pdtaltrelt0_.rule_status_typ_dbky is null )
>         or pdtaltrelt0_.status_typ_dbky in ( 19 )
>         or pdtaltrelt0_.status_typ_dbky in (20 )
>      )
> and ( pdtaltrelt0_.status_typ_dbky in (19 , 20)
>            or pdtaltrelt0_.status_typ_dbky=102
>            and (pdtaltrelt0_.rule_status_typ_dbky is null)
>         )
> TO
>
> and (
> (pdtaltrelt0_.status_typ_dbky = 102 and pdtaltrelt0_.rule_status_typ_dbky
> is null)
> or pdtaltrelt0_.status_typ_dbky in (19, 20)
> )
>
> The Explain shows the filter seq filter like so
>  Filter: (
>      ((status_typ_dbky = ANY ('{19,20}'::bigint[]))
>        OR ((status_typ_dbky = 102) AND (rule_status_typ_dbky IS NULL))
>       )
>  AND
>      (((status_typ_dbky = 102) AND (rule_status_typ_dbky IS NULL))
>         OR (status_typ_dbky = 19)
>         OR (status_typ_dbky = 20)
>     )
> )
>
> I can not see the difference between above/below the AND  other than the
> order of operations...
>
>
>
> On Mon, Dec 9, 2019 at 1:33 PM saket bansal <saket....@gmail.com> wrote:
>
>> Hi Postgres Experts,
>>
>> Please help me on a query tuning.
>> Postgres verson: 11.5
>> This database has been migrated from oracle 12c to postgres. In Oracle
>> query executes in 2-3 secs, but in postgres it hangs forever.  There are no
>> transactions at this time, I am stuck at first run after migration.
>>
>> My analysis:
>>
>> I have done vacuum full , analyze , even with 100% samples using a much
>> higher value of default_statistics_target.
>> Also tried different hints using pg_hint_plan extension. Overall cost
>> reduces, but actual run hangs forever.
>> I think problem is with correlated subquery join condition.
>> If "and pdtaltrelt*%*_.tenant_dkby=pdtaltrelt0_.tenant_dkby" condition
>> is removed from both subqueries, result comes in secs(I understand that
>> would be skipping correlated join)
>>
>>  SQL> select count(*) from pdtalt_rel_to_tenant_rel;
>>     267216
>>
>> SQL> select count(distinct tenant_dkby) from pdtalt_rel_to_tenant_rel;
>>                          3
>>
>> Table DDLs , query plan and parameter configuration available at below
>> git link:
>> https://github.com/bansalsaket/PG_correlated_subquery_slowness
>>
>> I have 16 GB , 4 CPU , rhel 7 machine.
>>
>> Thanks for help in advance, let me know if any additional information is
>> required
>>
>>

Reply via email to