Re: insert multi values limitations
Anthony Nowocien <[email protected]> Mon, 23 Sep 2019 12:44:25 +0200
| Newsgroups | gmane.comp.db.postgresql.french |
|---|---|
| Message-ID | <CAH5RRoNFLNB3KPsvXC+ypXasoPXhCYUhFuTpoG5qzXiUVXppPQ@mail.gmail.com> |
--00000000000035adfc0593361b6b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Bonjour, D'apr=C3=A8s https://stackoverflow.com/questions/47664889/jdbc-batch-operations-understa= nding/48349524#48349524 *"It is smart enough to use 2 statements in order to insert 10 rows. The first one is 8-valued statement, and the second one is 2-valued statement. Usage of powers of two enables pgjdbc to keep the number of distinct statements sane, and that improves performance as often-used statements are server-prepared (see What's the life span of a PostgreSQL server-side prepared statement <https://stackoverflow.com/questions/32297503/whats-the-life-span-of-a-post= gresql-server-side-prepared-statement/32300222#32300222> )" * Si tu souhaites envoyer exactement le nombre de valeurs pr=C3=A9cis=C3=A9es= dans batch_size, alors il faudra mettre une puissance de 2, sous peine de voir l'INSERT splitt=C3=A9. Anthony On Mon, Sep 23, 2019, 11:24 CRUMEYROLLE Pierre <[email protected]> wrote: > > bonjour > > je teste une insertion multi valeurs via spring boot jpa hibernate jdbc , > en positionnant les param=C3=A8tres suivants : > > spring.jpa.properties.hibernate.jdbc.batch_size=3D10 > reWriteBatchedInsereWriteBatchedInserts=3Dtrue dans ma connexion jdbc > > spring.datasource.url=3Djdbc:postgresql://localhost:5432/postgres?reWrite= BatchedInserts=3Dtrue > > normalement ceci doit g=C3=A9n=C3=A9rer des insert multi valeurs par paqu= ets de > 10 =3D> insert into mytable (id , data) values > (1,),(,),(,),(,),(,),(,),(,),(,),(,),(10,) > > mais je constate que les insert multi values sont "split=C3=A9s" de la > fa=C3=A7on suivante > > insert into mytable (id , data) values (1,),(,),(,),(,),(,),(,),(,),(8,) > insert into mytable (id , data) values (9,),(10,), > > il semblerait que le driver postgres split les insert multi values > suivant des r=C3=A8gles particuli=C3=A8res > et en effet je retombe dans le sc=C3=A9nario d=C3=A9crit en fin de cette = page =3D> > > https://vladmihalcea.com/postgresql-multi-row-insert-rewritebatchedinsert= s-property/ > qui dit "the PostgreSQL driver will split it into smaller ones to > address TCP deadlock issues" > > quelqu'un peut il me donner une petite explication confirmation sur ce > comportement > > Merci > > > --00000000000035adfc0593361b6b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"auto"><div>Bonjour,<div dir=3D"auto"><br></div><div dir=3D"auto= ">D'apr=C3=A8s=C2=A0<a href=3D"https://stackoverflow.com/questions/4766= 4889/jdbc-batch-operations-understanding/48349524#48349524">https://stackov= erflow.com/questions/47664889/jdbc-batch-operations-understanding/48349524#= 48349524</a></div><div dir=3D"auto"><br></div><div dir=3D"auto"><i><span st= yle=3D"color:rgb(12,13,14);font-family:"helvetica neue",helvetica= ,arial,sans-serif;font-size:15px;background-color:rgb(255,255,255)">"I= t is smart enough to use 2 statements in order to insert 10 rows. The first= one is 8-valued statement, and the second one is 2-valued statement. Usage= of powers of two enables pgjdbc to keep the number of distinct statements = sane, and that improves performance as often-used statements are server-pre= pared (see=C2=A0</span><a href=3D"https://stackoverflow.com/questions/32297= 503/whats-the-life-span-of-a-postgresql-server-side-prepared-statement/3230= 0222#32300222" style=3D"margin:0px;padding:0px;border:0px;line-height:inher= it;font-family:"helvetica neue",helvetica,arial,sans-serif;font-s= ize:15px;vertical-align:baseline;color:rgb(0,119,204);text-decoration-line:= none;background-color:rgb(255,255,255)">What's the life span of a Postg= reSQL server-side prepared statement</a><span style=3D"color:rgb(12,13,14);= font-family:"helvetica neue",helvetica,arial,sans-serif;font-size= :15px;background-color:rgb(255,255,255)">=C2=A0)"=C2=A0</span></i><br>= </div><div dir=3D"auto"><font color=3D"#0c0d0e" face=3D"helvetica neue, hel= vetica, arial, sans-serif"><span style=3D"font-size:15px"><i><br></i></span= ></font></div><div dir=3D"auto">Si tu souhaites envoyer exactement le nombr= e de valeurs pr=C3=A9cis=C3=A9es dans batch_size, alors il faudra mettre un= e puissance de 2, sous peine de voir l'INSERT splitt=C3=A9.</div><div d= ir=3D"auto"><br></div><div dir=3D"auto">Anthony</div><br><br><div class=3D"= gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Mon, Sep 23, 2019, 11= :24 CRUMEYROLLE Pierre <<a href=3D"mailto:[email protected]" tar= get=3D"_blank" rel=3D"noreferrer">[email protected]</a>> wrote:<= br></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;borde= r-left:1px #ccc solid;padding-left:1ex"><br> bonjour<br> <br> je teste une insertion multi valeurs via spring boot jpa hibernate jdbc ,<b= r> en positionnant les param=C3=A8tres suivants :<br> <br> spring.jpa.properties.hibernate.jdbc.batch_size=3D10<br> reWriteBatchedInsereWriteBatchedInserts=3Dtrue=C2=A0 dans ma connexion jdbc= =C2=A0 =C2=A0<br> spring.datasource.url=3Djdbc:postgresql://localhost:5432/postgres?reWriteBa= tchedInserts=3Dtrue<br> <br> normalement ceci doit g=C3=A9n=C3=A9rer des insert multi valeurs par paquet= s de=C2=A0 <br> 10 =3D> insert into mytable (id , data) values=C2=A0 <br> (1,),(,),(,),(,),(,),(,),(,),(,),(,),(10,)<br> <br> mais je constate que les insert multi values=C2=A0 sont "split=C3=A9s&= quot; de la=C2=A0 <br> fa=C3=A7on suivante<br> <br> insert into mytable (id , data) values (1,),(,),(,),(,),(,),(,),(,),(8,)<br= > insert into mytable (id , data) values (9,),(10,),<br> <br> il semblerait que le driver postgres split les insert multi values=C2=A0 <b= r> suivant des r=C3=A8gles particuli=C3=A8res<br> et en effet je retombe dans le sc=C3=A9nario d=C3=A9crit en fin de cette pa= ge =3D>=C2=A0 <br> <a href=3D"https://vladmihalcea.com/postgresql-multi-row-insert-rewritebatc= hedinserts-property/" rel=3D"noreferrer noreferrer noreferrer" target=3D"_b= lank">https://vladmihalcea.com/postgresql-multi-row-insert-rewritebatchedin= serts-property/</a><br> qui dit "the PostgreSQL driver will split it into smaller ones to=C2= =A0 <br> address TCP deadlock issues"<br> <br> quelqu'un peut il me donner une petite explication confirmation sur ce= =C2=A0 <br> comportement<br> <br> Merci<br> <br> <br> </blockquote></div> </div></div> --00000000000035adfc0593361b6b--