Re: Ayuda con estadisticas

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Cristian Saavedra <cristian(dot)aquii(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Ayuda con estadisticas
Date: 2006-05-31 22:51:30
Message-ID: 20060531225130.GA13243@surnet.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Cristian Saavedra escribió:
> Acabo de hacer de nuevo el analyze de las tablas, voy a comparar los
> resultados, pero por si acaso adjunto el resultado del explain junto con el
> query, tambien hice un select count de las tablas para que dispongan del
> numero de registros por tabla.

Creo que el principal problema esta aqui:

> -> Index Scan using cxs_cat_136_index on zcatxsuc_136 (cost=0.00..1864.42 rows=1075 width=4) (actual time=0.019..71.631 rows=10027 loops=1)
> Index Cond: (cxs_cat_fk_n = 809)

Observa que cree que hay 1075 filas que cumplen la condicion, cuando en
realidad hay 10027. Intenta con ALTER TABLE / SET STATISTICS para esa
columna; el valor por defecto es 10. Ponlo en 20, en 40, en 100.
Despues de cada cambio, ejecutas ANALYZE sobre esta tabla y trata el
EXPLAIN ANALYZE nuevamente.

> Limit (cost=6306.07..6306.22 rows=60 width=218) (actual time=980.996..981.597 rows=60 loops=1)
> -> Sort (cost=6306.07..6308.76 rows=1076 width=218) (actual time=980.983..981.180 rows=60 loops=1)
> Sort Key: sucursales_136.suc_norm_name_s
> -> Merge Join (cost=6127.14..6251.89 rows=1076 width=218) (actual time=599.741..817.989 rows=10027 loops=1)
> Merge Cond: ("outer".loc_id_n = "inner".suc_loc_fk_n)
> -> Index Scan using location_pkey on "location" (cost=0.00..4716.07 rows=144354 width=17) (actual time=0.016..15.329 rows=2474 loops=1)

Aca tambien parece haber un problema; por que esta usando un indice, si
cree que retorna tantas filas en esta tabla? Probablemente deberia
estar escogiendo un seqscan. No habras puesto enable_seqscan=off?
Nota que no hay "Index Cond:", lo que indica que esta usando el indice
solamente para obtener el resultado ordenado ... mala idea, porque suele
ser mas rapido hacer el seqscan.

OTOH creo que tambien seria bueno aplicar AT/SET STATISTICS en la(s)
columna(s) de la PK de location.

> -> Sort (cost=6127.14..6129.83 rows=1075 width=205) (actual time=592.357..643.639 rows=10027 loops=1)
> Sort Key: sucursales_136.suc_loc_fk_n
> -> Nested Loop (cost=0.00..6073.02 rows=1075 width=205) (actual time=0.058..507.954 rows=10027 loops=1)
> -> Index Scan using cxs_cat_136_index on zcatxsuc_136 (cost=0.00..1864.42 rows=1075 width=4) (actual time=0.019..71.631 rows=10027 loops=1)
> Index Cond: (cxs_cat_fk_n = 809)
> -> Index Scan using sucursales_136_pkey on sucursales_136 (cost=0.00..3.90 rows=1 width=205) (actual time=0.013..0.019 rows=1 loops=10027)
> Index Cond: (sucursales_136.suc_id_n = "outer".cxs_suc_fk_n)
> Total runtime: 986.670 ms
> (14 rows)

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jose Joaquin Lorente Garcia 2006-06-01 08:20:22 Re: servidores en linea?
Previous Message Mario 2006-05-31 22:30:16 Re: Recomendacion de hardware