Vous n'êtes pas identifié(e).
Je serais intéressé de savoir ce que donne les performances de la requête avec le join_collapse_limit par défaut (8, je crois).
De plus, attention au fait que le côté ordonné se perd au fil des INSERT/UPDATE/DELETE. Donc il faudra exécuter de nouveau CLUSTER de temps à autre.
Guillaume.
Hors ligne
je retombe
Durée totale d'exécution de la requête :2687 ms.
161 lignes récupérées.
SET from_collapse_limit TO 8;
SET join_collapse_limit TO 8;
explain analyse select mdmetadata0_.id as col_0_0_ from public.md_metadata mdmetadata0_
inner join public.mf_metadata mdmetadata0_1_ on mdmetadata0_.id=mdmetadata0_1_.id
join public.content_info contentinf1_ on mdmetadata0_.id=contentinf1_.fk_metadata
left outer join public.mi_imagedesc contentinf1_1_ on contentinf1_.id=contentinf1_1_.id
left outer join public.mi_radarimagedesc contentinf1_2_ on contentinf1_.id=contentinf1_2_.id
left outer join public.mi_opticalimagedesc contentinf1_3_ on contentinf1_.id=contentinf1_3_.id
left outer join public.md_identification identifica2_ on mdmetadata0_.id=identifica2_.fk_md_metadata
left outer join public.md_dataidentification identifica2_1_ on identifica2_.id=identifica2_1_.id
join public.catalog_id catalogid3_ on identifica2_1_.fk_catalog_id=catalogid3_.id
join public.ex_temporalextent temporalex4_ on identifica2_.id=temporalex4_.fk_dataident
where contentinf1_1_.attribute_desc='DATASTRIP_SCENE'
and catalogid3_.profile='LEVEL0'
and (temporalex4_.begin_ between '2007-08-02' and '2007-08-30')
"Nested Loop (cost=52157.93..85267.26 rows=1 width=22) (actual time=1865.156..4994.184 rows=154 loops=1)"
" -> Hash Join (cost=52157.93..85266.60 rows=1 width=62) (actual time=1865.093..4990.764 rows=154 loops=1)"
" Hash Cond: ((identifica2_.id)::text = (temporalex4_.fk_dataident)::text)"
" -> Hash Join (cost=52141.56..84472.30 rows=207445 width=142) (actual time=1842.028..4870.900 rows=206718 loops=1)"
" Hash Cond: ((mdmetadata0_1_.id)::text = (mdmetadata0_.id)::text)"
" -> Hash Left Join (cost=42890.11..71257.93 rows=192868 width=186) (actual time=1543.397..4147.864 rows=206718 loops=1)"
" Hash Cond: ((contentinf1_.id)::text = (contentinf1_2_.id)::text)"
" -> Hash Left Join (cost=42877.41..70520.95 rows=192868 width=226) (actual time=1543.370..3930.902 rows=206718 loops=1)"
" Hash Cond: ((contentinf1_.id)::text = (contentinf1_3_.id)::text)"
" -> Hash Join (cost=35243.96..58789.05 rows=192868 width=226) (actual time=1251.403..3218.354 rows=206718 loops=1)"
" Hash Cond: ((identifica2_.id)::text = (identifica2_1_.id)::text)"
" -> Hash Join (cost=25911.51..45358.16 rows=192868 width=146) (actual time=921.434..2453.369 rows=206718 loops=1)"
" Hash Cond: ((contentinf1_.id)::text = (contentinf1_1_.id)::text)"
" -> Hash Join (cost=15000.19..30439.11 rows=207906 width=146) (actual time=601.957..1700.817 rows=223620 loops=1)"
" Hash Cond: ((mdmetadata0_1_.id)::text = (contentinf1_.fk_metadata)::text)"
" -> Hash Join (cost=7337.74..18181.87 rows=223620 width=84) (actual time=300.023..913.855 rows=223620 loops=1)"
" Hash Cond: ((identifica2_.fk_md_metadata)::text = (mdmetadata0_1_.id)::text)"
" -> Seq Scan on md_identification identifica2_ (cost=0.00..6092.20 rows=223620 width=62) (actual time=0.024..136.218 rows=223620 loops=1)"
" -> Hash (cost=4331.22..4331.22 rows=240522 width=22) (actual time=299.878..299.878 rows=240522 loops=1)"
" -> Seq Scan on mf_metadata mdmetadata0_1_ (cost=0.00..4331.22 rows=240522 width=22) (actual time=0.017..142.665 rows=240522 loops=1)"
" -> Hash (cost=4867.20..4867.20 rows=223620 width=62) (actual time=301.820..301.820 rows=223620 loops=1)"
" -> Seq Scan on content_info contentinf1_ (cost=0.00..4867.20 rows=223620 width=62) (actual time=0.027..139.955 rows=223620 loops=1)"
" -> Hash (cost=8318.25..8318.25 rows=207445 width=40) (actual time=319.357..319.357 rows=206718 loops=1)"
" -> Seq Scan on mi_imagedesc contentinf1_1_ (cost=0.00..8318.25 rows=207445 width=40) (actual time=0.033..176.137 rows=206718 loops=1)"
" Filter: ((attribute_desc)::text = 'DATASTRIP_SCENE'::text)"
" -> Hash (cost=6537.20..6537.20 rows=223620 width=80) (actual time=329.914..329.914 rows=223620 loops=1)"
" -> Seq Scan on md_dataidentification identifica2_1_ (cost=0.00..6537.20 rows=223620 width=80) (actual time=0.030..158.099 rows=223620 loops=1)"
" -> Hash (cost=4838.20..4838.20 rows=223620 width=40) (actual time=291.851..291.851 rows=223620 loops=1)"
" -> Seq Scan on mi_opticalimagedesc contentinf1_3_ (cost=0.00..4838.20 rows=223620 width=40) (actual time=0.026..136.670 rows=223620 loops=1)"
" -> Hash (cost=11.20..11.20 rows=120 width=90) (actual time=0.002..0.002 rows=0 loops=1)"
" -> Seq Scan on mi_radarimagedesc contentinf1_2_ (cost=0.00..11.20 rows=120 width=90) (actual time=0.001..0.001 rows=0 loops=1)"
" -> Hash (cost=6456.20..6456.20 rows=223620 width=22) (actual time=298.593..298.593 rows=223620 loops=1)"
" -> Seq Scan on md_metadata mdmetadata0_ (cost=0.00..6456.20 rows=223620 width=22) (actual time=0.016..150.434 rows=223620 loops=1)"
" -> Hash (cost=16.36..16.36 rows=1 width=40) (actual time=0.472..0.472 rows=172 loops=1)"
" -> Index Scan using ind_ex_temporalextent_begin_ on ex_temporalextent temporalex4_ (cost=0.00..16.36 rows=1 width=40) (actual time=0.081..0.292 rows=172 loops=1)"
" Index Cond: ((begin_ >= '2007-08-02 00:00:00'::timestamp without time zone) AND (begin_ <= '2007-08-30 00:00:00'::timestamp without time zone))"
" -> Index Scan using catalog_id_pkey on catalog_id catalogid3_ (cost=0.00..0.65 rows=1 width=40) (actual time=0.019..0.020 rows=1 loops=154)"
" Index Cond: ((identifica2_1_.fk_catalog_id)::text = (catalogid3_.id)::text)"
" Filter: ((profile)::text = 'LEVEL0'::text)"
"Total runtime: 5003.214 ms"
Hors ligne
OK, donc il vous faut les deux si j'ai bien compris.
Guillaume.
Hors ligne
Oui,
je me demande si le cluster a une utilité !!! , j'ai un gros test de chargement au moins de juillet sur cette base , passage de 200.000 enregs à 500.000 enregs donc je vous informerais de l'utilité ou pas du cluster !!!!
Merci pour toutes vos informations qui ont été très précieuses.
A bientôt
Francis
Hors ligne
Pourriez-vous venir commenter vos résultats en juillet ? ça ferait un bon feedback, particulièrement intéressant. Merci.
Guillaume.
Hors ligne
Désolé, j'ai pas été clair tout à l'heure : c'est le join_collapse_limit qu'il faut modifier. le from_collapse_limit s'applique aux subselect, le join_collapse_limit aux jointures.
Je ne pense pas que le cluster serve a quelque chose, puisqu'on accède je pense à des enregistrements de cette table de façon un peu aléatoire. Le cluster est surtout très efficace pour des range scans.
Dernière modification par Marc Cousin (19/06/2009 18:32:38)
Marc.
Hors ligne
Naturellement
je vous fait un retour en juillet sur le cluster et from_collapse - join_collapse
pour cela , je continue à répondre à ce message ou j'en ouvre un autre ???
Hors ligne
Sur ce message. Vu que c'est la suite, ça me paraît le plus logique... Merci à l'avance
Guillaume.
Hors ligne
merci et Bon week-end
A bientot
Hors ligne