Re: requête plus rapide avec une table distante

From: Dimitri Fontaine <dimitri(at)2ndQuadrant(dot)fr>
To: Dominique Vallée <dominique(dot)vallee(at)mnhn(dot)fr>
Cc: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: requête plus rapide avec une table distante
Date: 2015-03-25 17:13:32
Message-ID: m2r3sdyp8j.fsf@2ndQuadrant.fr
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Dominique Vallée <dominique(dot)vallee(at)mnhn(dot)fr> writes:
> Je donne les liens des explain analyze pour les 2 requêtes :

On remarque les éléments suivants :

- le scan séquentiel de la table locale prend 0.320 ms

Seq Scan on public.fao_aires_local f
(cost=0.00..88.22 rows=322 width=26,336)
(actual time=0.008..0.320 rows=322 loops=1)
Output: f.gid, f.f_code, f.f_level, f.ocean, f.subocean, f.the_geom
Buffers: shared hit=85

- le scan séquentiel de la table distante prend 293 ms, soit presque
mille fois plus de temps

Foreign Scan on public.fao_areas f
(cost=100.00..114.29 rows=143 width=548)
(actual time=203.733..293.851 rows=322 loops=1)
Output: f.gid, f.f_code, f.f_level, f.ocean, f.subocean, f.the_geom
Remote SQL: SELECT f_code, the_geom FROM public.fao_areas

- le plan d'exécution avec une table distante privilégie un Bitmap
Index Scan qui prend 5 ms

Bitmap Index Scan on gist_tmp_obs_coordgps
(cost=0.00..4.60 rows=50 width=0)
(actual time=5.141..5.141 rows=7,582 loops=322)
Index Cond: (f.the_geom && o.geom)
Buffers: shared hit=13925 read=3351

- le plan d'exécution local privilégie un Index Scan qui prend 1811 ms

Index Scan using gist_tmp_obs_coordgps on public.tmp_obs_coordgps o
(cost=0.29..69.70 rows=3 width=35)
(actual time=1.827..1,811.050 rows=1,552 loops=322)
Output: o.geom, o.idcampagne, o.code_fao
Index Cond: (f.the_geom && o.geom)
Filter: (((f.f_code)::text = o.code_fao) AND _st_contains(f.the_geom, o.geom))
Rows Removed by Filter: 6030
Buffers: shared hit=20678741

Le point étonnant ici est le nombre de buffers que le plan Index Scan
doit lire (depuis les shared buffers, donc en mémoire, mais quand
même) : 20 millions de buffers lus contre moins de 14 mille pour le
bitmap index scan.

Pas le temps de procéder à une analyze plus détaillée, voilà simplement
les éléments qui me sautent au yeux, en espérant que ça aide déjà.

--
Dimitri Fontaine
http://2ndQuadrant.fr PostgreSQL : Expertise, Formation et Support

--
Envoi via la liste pgsql-fr-generale (pgsql-fr-generale(at)postgresql(dot)org)

In response to

Responses

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Dominique Vallée 2015-03-26 08:47:48 Re: requête plus rapide avec une table distante
Previous Message Daniel Verite 2015-03-25 17:09:41 Re: requête plus rapide avec une table distante