PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 21/03/2019 17:45:07

coucou78187
Membre

Optimisation requête

Bonjour à tou(te)s,


je vous propose ce sujet si vous le permettez,

une requête de jointure simple :


select * from table1 t1 join table2 t2 on t1.c1 = t2.c2;



t1 = 760000 rows
t2 = 15000000 rows

c1 = integer avec btree index et unique constraint
c2 = integer avec btree index



maintenance_work_mem = 224MB
checkpoint_completion_target = 0.9
effective_cache_size = 2816MB
work_mem = 64MB
wal_buffers = 16MB
shared_buffers = 896MB
max_connections = 200



explain analyze buffer select * from table1 t1 join table2 t2 on t1.c1 = t2.c2:



Merge Join  (cost=13.07..695479.32 rows=15118257 width=2410) (actual time=0.022..8080.992 rows=15116864 loops=1)
   Merge Cond: (t1.t1_inst_id_ = t2.t1_inst_id_)
   Buffers: shared hit=97064 read=261175
   ->  Index Scan using table1_t1_inst_id__key on table1 t1  (cost=0.42..23766.66 rows=758949 width=1793) (actua
l time=0.010..176.442 rows=758997 loops=1)
         Buffers: shared hit=9558 read=12085
   ->  Index Scan using act_idx_hi_t1t2_t1_inst on table2 t2  (cost=0.43..481117.29 rows=15118257 width=617) (actual tim
e=0.006..3352.968 rows=15116864 loops=1)
         Buffers: shared hit=87506 read=249090
Planning Time: 0.360 ms
Execution Time: 8748.590 ms
(9 lignes)



OS: centos 7
pgsql : 9.3




je voulais vous demander quelles seraient les techniques d'optimisation pour celà svp.



en effet il n'y a pas de clause where pour discriminer un minimum...



l'explain indique un temps d'exécution de 9 secondes alors que la requete en prends plus de 100000 Milli-Secondes...



Merci beaucoup

Dernière modification par coucou78187 (21/03/2019 17:46:25)

Hors ligne

#2 21/03/2019 19:38:57

rjuju
Administrateur

Re : Optimisation requête

Bonjour,

Il n'y a pas vraiment d'optimisation possible, à part avoir plus de RAM étant donné qu'il y a beaucoup d'accès en dehors du cache de postgres (environ 2 Go).  La différence de temps entre l'explain et l'exécution est probablement simplement le temps de transférer et afficher les 15 millions de lignes.

Hors ligne

#3 29/03/2019 17:01:54

coucou78187
Membre

Re : Optimisation requête

Bonjour Julien,


Merci beaucoup pour vos éclairages et conseils smile

Hors ligne

#4 31/03/2019 18:58:38

gleu
Administrateur

Re : Optimisation requête

Un petit ajout. Si vous aviez configuré track_io_timing à on, vous auriez le temps des demandes de lecture et écriture au noyau. C'est le seul vrai moyen pour dire si c'est ça qui pose problème.


Guillaume.

Hors ligne

Pied de page des forums