Lists: | pgsql-fr-generale |
---|
From: | CRUMEYROLLE Pierre <pierre(dot)crumeyrolle(at)c-s(dot)fr> |
---|---|
To: | pgsql-fr-generale(at)lists(dot)postgresql(dot)org |
Subject: | insert multi values limitations |
Date: | 2019-09-23 09:25:31 |
Message-ID: | 20190923112531.Horde.IAL-cYM4r4E9KaJz2JCYcA1@messagerie.c-s.fr |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | Postg토토 결과SQL : Postg토토 |
bonjour
je teste une insertion multi valeurs via spring boot jpa hibernate jdbc ,
en positionnant les paramètres suivants :
spring.jpa.properties.hibernate.jdbc.batch_size=10
reWriteBatchedInsereWriteBatchedInserts=true dans ma connexion jdbc
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres?reWriteBatchedInserts=true
normalement ceci doit générer des insert multi valeurs par paquets de
10 => insert into mytable (id , data) values
(1,),(,),(,),(,),(,),(,),(,),(,),(,),(10,)
mais je constate que les insert multi values sont "splités" de la
façon 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ègles particulières
et en effet je retombe dans le scénario décrit en fin de cette page =>
https://vladmihalcea.com/postgresql-multi-row-insert-rewritebatchedinserts-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
From: | Anthony Nowocien <anowocien(at)gmail(dot)com> |
---|---|
To: | CRUMEYROLLE Pierre <pierre(dot)crumeyrolle(at)c-s(dot)fr> |
Cc: | pgsql-fr-generale(at)lists(dot)postgresql(dot)org |
Subject: | Re: insert multi values limitations |
Date: | 2019-09-23 10:44:25 |
Message-ID: | CAH5RRoNFLNB3KPsvXC+ypXasoPXhCYUhFuTpoG5qzXiUVXppPQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Bonjour,
D'après
https://stackoverflow.com/questions/47664889/jdbc-batch-operations-understanding/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-postgresql-server-side-prepared-statement/32300222#32300222>
)" *
Si tu souhaites envoyer exactement le nombre de valeurs précisées dans
batch_size, alors il faudra mettre une puissance de 2, sous peine de voir
l'INSERT splitté.
Anthony
On Mon, Sep 23, 2019, 11:24 CRUMEYROLLE Pierre <pierre(dot)crumeyrolle(at)c-s(dot)fr>
wrote:
>
> bonjour
>
> je teste une insertion multi valeurs via spring boot jpa hibernate jdbc ,
> en positionnant les paramètres suivants :
>
> spring.jpa.properties.hibernate.jdbc.batch_size=10
> reWriteBatchedInsereWriteBatchedInserts=true dans ma connexion jdbc
>
> spring.datasource.url=jdbc:postgresql://localhost:5432/postgres?reWriteBatchedInserts=true
>
> normalement ceci doit générer des insert multi valeurs par paquets de
> 10 => insert into mytable (id , data) values
> (1,),(,),(,),(,),(,),(,),(,),(,),(,),(10,)
>
> mais je constate que les insert multi values sont "splités" de la
> façon 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ègles particulières
> et en effet je retombe dans le scénario décrit en fin de cette page =>
>
> https://vladmihalcea.com/postgresql-multi-row-insert-rewritebatchedinserts-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
>
>
>
From: | CRUMEYROLLE Pierre <pierre(dot)crumeyrolle(at)c-s(dot)fr> |
---|---|
To: | pgsql-fr-generale(at)lists(dot)postgresql(dot)org |
Subject: | Re: insert multi values limitations |
Date: | 2019-09-23 12:36:30 |
Message-ID: | 20190923143630.Horde.JyrCuPJV1WgE5y57ur2mUA1@messagerie.c-s.fr |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Ok merci
testé, je confirme
spring.jpa.properties.hibernate.jdbc.batch_size => exprimé en
puissance de 2 => insert non splitté
Anthony Nowocien <anowocien(at)gmail(dot)com> a écrit :
> Bonjour,
>
> D'après
> https://stackoverflow.com/questions/47664889/jdbc-batch-operations-understanding/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-postgresql-server-side-prepared-statement/32300222#32300222>
> )" *
>
> Si tu souhaites envoyer exactement le nombre de valeurs précisées dans
> batch_size, alors il faudra mettre une puissance de 2, sous peine de voir
> l'INSERT splitté.
>
> Anthony
>
>
> On Mon, Sep 23, 2019, 11:24 CRUMEYROLLE Pierre <pierre(dot)crumeyrolle(at)c-s(dot)fr>
> wrote:
>
>>
>> bonjour
>>
>> je teste une insertion multi valeurs via spring boot jpa hibernate jdbc ,
>> en positionnant les paramètres suivants :
>>
>> spring.jpa.properties.hibernate.jdbc.batch_size=10
>> reWriteBatchedInsereWriteBatchedInserts=true dans ma connexion jdbc
>>
>> spring.datasource.url=jdbc:postgresql://localhost:5432/postgres?reWriteBatchedInserts=true
>>
>> normalement ceci doit générer des insert multi valeurs par paquets de
>> 10 => insert into mytable (id , data) values
>> (1,),(,),(,),(,),(,),(,),(,),(,),(,),(10,)
>>
>> mais je constate que les insert multi values sont "splités" de la
>> façon 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ègles particulières
>> et en effet je retombe dans le scénario décrit en fin de cette page =>
>>
>> https://vladmihalcea.com/postgresql-multi-row-insert-rewritebatchedinserts-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
>>
>>
>>