Re: parallelisme insert/update unnest constraint
CRUMEYROLLE Pierre <[email protected]> Mon, 02 Sep 2019 17:44:46 +0200
| Newsgroups | gmane.comp.db.postgresql.french |
|---|---|
| Message-ID | <[email protected]> |
Anthony Nowocien <[email protected]> a =C3=A9crit=C2=A0: > Bonjour, > > J'ai eu un batch de 40 000 000 INSERTs =C3=A0 faire sur un serveur =C3=A0= 12CPU - > donc un traitement assez proche du tien - et parall=C3=A9liser sur plusie= urs > sessions a permis de passer le temps de 130m =C3=A0 18m. Apr=C3=A8s il va= ut mieux > laisser un peu de CPUs libres pour le reste des process PG... Cela devrai= t > =C3=AAtre similaire pour des UPDATE (peut =C3=AAtre difficile =C3=A0 s=C3= =A9parer dans ton > cas?). > > Anthony > > > On Mon, Sep 2, 2019, 15:22 Guillaume Lelarge <[email protected]> wro= te: > >> Le lun. 2 sept. 2019 =C3=A0 14:17, CRUMEYROLLE Pierre < >> [email protected]> a =C3=A9crit : >> >>> >>> bonjour >>> >>> je tente de faire un update massif par unnest sur un table de 20 >>> millions de ligne, >>> j'ai l'impression que le parall=C3=A9lisme n'est pas vraiment pris en >>> compte dans ce cas >>> les cpu sont =C3=A0 100% mais pas par alternance , pas de r=C3=A9partit= ion >>> homog=C3=A8ne de la charge cpu. >>> >>> les perf en insertion sont bonnes ( 10 millions de ligne en 6 minutes) >>> par contre en update =C3=A7a rame . >>> >>> malgr=C3=A9 un postgresl.conf adapt=C3=A9 =C3=A0 une cible multi cpu (1= 2) >>> max_worker_processes =3D 12 >>> max_parallel_workers_per_gather =3D 6 >>> max_parallel_workers =3D 12 >>> version =3D> postgresl 11.4 >>> >>> ma question : peut t'on faire du parall=C3=A9lisme sur de l'insert ou d= e >>> l'update avec ou sans contraintes deffer=C3=A9es ? >>> (j'ai cru comprendre que parall=C3=A9lisation =3D> multi transaction = =3D> pas >>> de constraintes ) >>> >>> ce que je fais dans une proc stock tentative update massif par unnest >>> ( mais c'est peut =C3=AAtre pas la bonne piste ? ) >>> >>> -- pk defferable >>> SET CONSTRAINTS t_test_pkey DEFERRED; >>> >>> UPDATE T_test SET data =3D jsonb_set(T.datanew::jsonb, '{id}',to_jsonb( >>> 'provider ' || (T.id::text))) , created_at =3D T.created_at::timestamp >>> FROM (select * from >>> unnest(tabi) as id, >>> unnest(tabp) as provider, >>> unnest(tabdate) as created_at, >>> unnest(tab) as datanew) T >>> where T_test.id=3Dcast(T.id as int); >>> COMMIT; >>> >>> >> PostgreSQL ne parall=C3=A9lise pas les requ=C3=AAtes en =C3=A9criture (c= omme INSERT ou >> UPDATE). Le seul moyen est de parall=C3=A9liser au niveau applicatif (do= nc >> plusieurs connexions, chacune faisant ses INSERT/UPDATE). >> >> >> -- >> Guillaume. >>