parallelisme insert/update unnest constraint

CRUMEYROLLE Pierre <[email protected]> Mon, 02 Sep 2019 14:18:07 +0200
Newsgroups gmane.comp.db.postgresql.french
Message-ID <[email protected]>
bonjour

je tente de faire un update massif par unnest sur un table de 20=20=20
millions=20de ligne,
j'ai l'impression que le parall=C3=A9lisme n'est pas vraiment pris en=20=20
compte=20dans ce cas
les cpu sont =C3=A0 100% mais pas par alternance , pas de r=C3=A9partition=
=20=20
homog=C3=A8ne de la charge cpu.

les perf en insertion sont bonnes ( 10 millions de ligne en 6 minutes)=20=
=20
par=20contre en update =C3=A7a rame .

malgr=C3=A9 un postgresl.conf adapt=C3=A9 =C3=A0 une cible multi cpu (12)
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 de=20=
=20
l'update=20avec ou sans contraintes deffer=C3=A9es ?
(j'ai cru comprendre que parall=C3=A9lisation =3D> multi transaction =3D> p=
as=20=20
de=20constraintes  )

ce que je fais dans une proc stock tentative update massif par unnest=20=20
(=20mais 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(=20=
=20
'provider=20' || (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;


cordialement