Re: traitement par lots et sequence

"Daniel Verite" <[email protected]> Wed, 12 Jun 2019 12:48:09 +0200
Newsgroups gmane.comp.db.postgresql.french
Message-ID <[email protected]>
	CRUMEYROLLE Pierre wrote:

> 3 -  boucle sur tous les id de m=E8re
> for i in liste_id_mere
> {
>    insertion d'un  paquet de j  filles pour une m=E8re
>    insert into T_filles idFils,idMere,datamere values=20=20
> ((j,i,dataf1),(j,i,dataf2),(j,i,dataf3), .... (j,i,datafn));
>     }
> }
>=20
> je suis oblig=E9 de faire de  l'insert par batch  car l'insertion=20=20
> unitaire postgresql n'est pas top , seul le traitement par lots donne=20=
=20
> des perfs convenables.

N'oubliez pas de faire tout =E7a dans la m=EAme transaction, sinon c'est
les commit interm=E9diaires implicites qui ruinent les performances.

Ind=E9pendamment de =E7a, effectivement envoyer beaucoup d'INSERT avec peu
de donn=E9es =E0 chaque fois n'est pas ce qu'il y a de plus efficace, mais
au vu de l'=E9tape 3 ci-dessus, on ne voit pas pourquoi cette boucle FOR
ne construit pas un seul INSERT par accumulation de VALUES, et
l'ex=E9cute une seule fois en dehors de la boucle.  Puisque que =E7a
ins=E8re toujours dans la m=EAme table et toujours avec les m=EAme colonnes
cibles.

Et une fois qu'on en est l=E0 dans le raisonnement, on peut se demander
aussi si =E7a ne pourrait pas faire un COPY dans la table cible au lieu
d'un INSERT g=E9ant, ce qui serait plus rapide aussi en permettant
notamment un effet de pipeline entre le client et le serveur.


Cordialement,
--
Daniel V=E9rit=E9