Received: from makus.postgresql.org (makus.postgresql.org [98.129.198.125])
by mail.postgresql.org (Postfix) with ESMTP id 393ACAF82E7
for
There was a table set statistics=C2=A0 changing the default value, no=
w I
remove and run analyze the stats are update correctly but the
problem of different plan still stand.
I set enable_nestloop off and the query plan is the following, the
query is fast now:
=C2=A0Hash IN Join=C2=A0 (cost=3D56574.39..118874.17 rows=3D117295 wi=
dth=3D620)
=C2=A0=C2=A0 Hash Cond: (t1.number =3D t2.number)
=C2=A0=C2=A0 ->=C2=A0 Index Scan using mov_con_x10 on mov_con t1=C2=
=A0
(cost=3D0.00..52469.07 rows=3D351884 width=3D620)
=C2=A0=C2=A0 ->=C2=A0 Hash=C2=A0 (cost=3D55108.20..55108.20 rows=3D=
117295 width=3D11)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ->=C2=A0 Index Sc=
an using mov_con_x10 on mov_con t2=C2=A0
(cost=3D0.00..55108.20 rows=3D117295 width=3D11)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 Filter: (abs((amount - total_amo)) > 0.1::double
precision)
Il 09/01/2012 15.59, Szymon Guz ha scritto:
In the last few hours we get a problem with following =C2=A0que=
ry
in Production database =C2=A0:
select * from "001".mov_con =C2=A0where number in ( select numb=
er
from "001".mov_con where abs(amount-total_amo)>0.1) ;
The correct plan should be
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 QUERY PLAN
------------------------------ ------------------------------
------------------------------ -----------
=C2=A0Nested Loop =C2=A0(cost=3D541763.01..584606.03 rows=3D1249640
width=3D360)
=C2=A0 -> =C2=A0HashAggregate =C2=A0(cost=3D541763.01..54180=
7.55 rows=3D4454
width=3D10)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 -> =C2=A0Index Scan using mov_co=
n_x9 on mov_con t2
=C2=A0(cost=3D0.00..538639.38 rows=3D1249452 width=3D10)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Filter: (abs((=
amount - total_amo)) >
0.1::double precision)
=C2=A0 -> =C2=A0Index Scan using mov_con_pkey on mov_con t1
=C2=A0(cost=3D0.00..6.10 rows=3D281 width=3D360)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 Index Cond: (t1.number =3D t2.numbe=
r)
(6 rows)
instead we get the following WRONG one:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0QUERY PLAN
------------------------------ ------------------------------
------------------------------ -----
=C2=A0Nested Loop IN Join =C2=A0(cost=3D0.00..52906.16 rows=3D1=
17499
width=3D620)
=C2=A0 -> =C2=A0Index Scan using mov_con_x10 on mov_con t1
=C2=A0(cost=3D0.00..52483.90 rows=3D352486 width=3D620)
=C2=A0 -> =C2=A0Index Scan using mov_con_x10 on mov_con t2
=C2=A0(cost=3D0.00..0.72 rows=3D3 width=3D11)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 Index Cond: (t2.number =3D t1.numbe=
r)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 Filter: (abs((t2.amount - t2.total_=
amo)) >
0.1::double precision)
So I go to see statistics and try to change the
default_statistics_target from 10 to 100 , reload the
configuration and vacuum the table and the result is that
while
the other tables have now 100 values on =C2=A0pg_stats the mov_=
con
table still have the same values
=C2=A0SELECT * FROM pg_stats
WHERE tablename=3D'mov_con' AND attname=3D'number' ;
So there is something wrong with table statistics. How can I
reset the pg_statistics for this table???
Any comment higly appreciated.
--=20
Silvio Brandani
Infrastructure Administrator
SDB Information Technology
Phone: +39.055.3811222
Fax: +39.055.5201119
=0D
=0D
=0D
=0D
=0D
=0D
Se avete ricevuto questo messaggio per errore Vi preghiamo di ritornarlo =
al mittente eliminandolo assieme agli eventuali allegati, ai sensi art. 6=
16 codice penale http://www.savinodelbene.com/privacy/codice_penale_616.ht=
ml=0D
=0D
L'Azienda non si assume alcuna responsabilità giuridica qualora per=
vengano da questo indirizzo messaggi estranei all'attività lavorati=
va o contrari a norme.=0D
=0D