web-dev-qa-db-fra.com

Comment activer les insertions par lots avec Hibernate et Spring Boot

Je veux insérer un grand nombre d'entités dans le tableau croisé. Pour ce faire, je souhaite activer l'option d'insertion par lots d'Hibernate, afin que chaque insert ajoute non pas 1, mais 20 ou 50 lignes à la fois.

J'essaie de reproduire les résultats de tutoriel de mise en veille prolongée . J'ai créé une fonction de test qui va essayer d'insérer 30 clients, comme dans l'exemple:

//Batch inserting test entities
//This code is inside transaction already, so I'm not creating a new one
entityManager.flush();
for (int i = 0; i < 30; ++i) {
    Customer customer = new Customer("Customer" + i, (i + 5) * 1000, "Position " + i);
    entityManager.persist(customer);
    if (i % 20 == 0) {
        entityManager.flush();
        entityManager.clear();
    }
}
entityManager.flush();
entityManager.clear();

La classe Customer n'a pas d'ID généré.

@Entity
public class Customer {

    @Id
    private String id;
    @Column
    private String name;
    @Column
    private long salary;
    @Column
    private String position;

    public Customer() {

    }

    public Customer(String name, long salary, String position) {
        this.id = UUID.randomUUID().toString();
        this.name = name;
        this.salary = salary;
        this.position = position;
    }

}

Ce que je m'attends à voir, c'est 2 instructions d'insertion, une pour 20 enregistrements et une pour 10 enregistrements. Cependant, lorsque j'ouvre des journaux postgres, je vois 30 instructions d'insertion, chacune insérant seulement 1 ligne. J'ai revérifié qu'il est possible d'insérer plusieurs lignes à l'aide de postgres.

Je pense que le problème est dû au hibernate.jdbc.batch_size 20 paramètre, que je suis censé passer en hibernation. Cependant, puisque j'utilise Spring Boot, le seul fichier de configuration que j'ai est application.properties. J'ai donc essayé de l'insérer ici:

hibernate.jdbc.batch_size=20
hibernate.order_inserts=true
hibernate.order_updates=true
hibernate.jdbc.batch_versioned_data=true
spring.jpa.hibernate.jdbc.batch_size=20
spring.jpa.hibernate.order_inserts=true
spring.jpa.hibernate.order_updates=true
spring.jpa.hibernate.jdbc.batch_versioned_data=true
spring.jpa.properties.hibernate.jdbc.batch_size=20
spring.jpa.properties.hibernate.order_inserts=true
spring.jpa.properties.hibernate.order_updates=true
spring.jpa.properties.hibernate.jdbc.batch_versioned_data=true

Selon cela réponse , cela devrait suffire, mais j'ai également essayé de copier ces paramètres dans le hibernate.properties fichier à l'intérieur de mon pot et fourni le paramètre via la ligne de commande: -Dhibernate.jdbc.batch_size=20 comme indiqué dans ce documentation .

Rien de tout cela n'aide.
Je ne trouve pas non plus de moyen de lire la propriété de taille de lot dans mon code. Il semble que la plupart des objets mentionnés dans la documentation d'Hibernate n'existent pas dans l'application Spring Boot.
Comment puis-je activer l'insertion par lots d'Hibernate dans l'application Spring Boot?

J'ai créé un exemple de travail minimal qui reproduit le problème: https://github.com/Alexey-/spring-boot- lot


Après avoir reçu la réponse de Vlad Mihalcea, j'ai réalisé que oui, en fait, les déclarations de lots fonctionnent, au moins aux niveaux de mise en veille prolongée et de jdbc.

Cependant, les journaux postgres eux-mêmes présentent un comportement très intéressant: ils sont presque identiques pour le cas des insertions par lots et des insertions normales.

Au départ, je m'attendais à voir que hibernate utiliserait des déclarations comme celle-ci:

test=# INSERT INTO customer (name, position, salary, id) values ('CustomerX', 'PositionX', '1000', 'idX'), ('CUSTOMERY', 'POSITIONY', '1000', 'idY');

Ce qui produirait des enregistrements de journal similaires à ceci:

2015-12-15 11:43:33.238 MSK LOG:  statement: INSERT INTO customer (name, position, salary, id) values ('CustomerX', 'PositionX', '1000', 'idX'), ('CUSTOMERY', 'POSITIONY', '1000', 'idY');

Mais ce n'est pas le cas.
Lorsque l'insertion par lots est activée (p6spy montre que les instructions sont, en fait, groupées), postgres produira des journaux similaires à ceci:

2015-12-15 12:07:00.638 MSK LOG:  execute <unnamed>: BEGIN
2015-12-15 12:07:00.638 MSK LOG:  duration: 0.000 ms
2015-12-15 12:07:00.638 MSK LOG:  duration: 0.000 ms  parse <unnamed>: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:07:00.638 MSK LOG:  duration: 0.000 ms  bind <unnamed>: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:07:00.638 MSK DETAIL:  parameters: $1 = 'Customer0', $2 = 'Position 0', $3 = '0', $4 = '9c6a86fb-c991-4e98-aa65-fa736ef67dd7'
2015-12-15 12:07:00.638 MSK LOG:  execute <unnamed>: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:07:00.638 MSK DETAIL:  parameters: $1 = 'Customer0', $2 = 'Position 0', $3 = '0', $4 = '9c6a86fb-c991-4e98-aa65-fa736ef67dd7'
2015-12-15 12:07:00.639 MSK LOG:  duration: 1.000 ms
2015-12-15 12:07:00.648 MSK LOG:  duration: 0.000 ms  parse S_1: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:07:00.648 MSK LOG:  duration: 0.000 ms  bind S_1: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:07:00.648 MSK DETAIL:  parameters: $1 = 'Customer1', $2 = 'Position 1', $3 = '10', $4 = 'c8b2669c-044a-4a4d-acbd-31c3bcd9a783'
2015-12-15 12:07:00.648 MSK LOG:  execute S_1: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:07:00.648 MSK DETAIL:  parameters: $1 = 'Customer1', $2 = 'Position 1', $3 = '10', $4 = 'c8b2669c-044a-4a4d-acbd-31c3bcd9a783'
2015-12-15 12:07:00.648 MSK LOG:  duration: 0.000 ms
2015-12-15 12:07:00.648 MSK LOG:  duration: 0.000 ms  bind S_1: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:07:00.648 MSK DETAIL:  parameters: $1 = 'Customer2', $2 = 'Position 2', $3 = '20', $4 = '1c694f41-2ce7-4ee2-a0c0-f359690506f0'
2015-12-15 12:07:00.649 MSK LOG:  execute S_1: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:07:00.649 MSK DETAIL:  parameters: $1 = 'Customer2', $2 = 'Position 2', $3 = '20', $4 = '1c694f41-2ce7-4ee2-a0c0-f359690506f0'
2015-12-15 12:07:00.649 MSK LOG:  duration: 0.000 ms
2015-12-15 12:07:00.649 MSK LOG:  duration: 0.000 ms  bind S_1: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:07:00.649 MSK DETAIL:  parameters: $1 = 'Customer3', $2 = 'Position 3', $3 = '30', $4 = '1815947d-2604-48d4-a6be-43f6905130cf'
2015-12-15 12:07:00.649 MSK LOG:  execute S_1: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:07:00.649 MSK DETAIL:  parameters: $1 = 'Customer3', $2 = 'Position 3', $3 = '30', $4 = '1815947d-2604-48d4-a6be-43f6905130cf'
2015-12-15 12:07:00.649 MSK LOG:  duration: 0.000 ms
2015-12-15 12:07:00.649 MSK LOG:  duration: 0.000 ms  bind S_1: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:07:00.649 MSK DETAIL:  parameters: $1 = 'Customer4', $2 = 'Position 4', $3 = '40', $4 = 'cc521007-820f-4d58-8e1a-16a166aa91cf'
2015-12-15 12:07:00.649 MSK LOG:  execute S_1: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:07:00.649 MSK DETAIL:  parameters: $1 = 'Customer4', $2 = 'Position 4', $3 = '40', $4 = 'cc521007-820f-4d58-8e1a-16a166aa91cf'
2015-12-15 12:07:00.649 MSK LOG:  duration: 0.000 ms
... the rest of the logs is identical and do not provide any valuable information...

Et lorsque les instructions de lot sont désactivées (p6spy montre qu'aucun lot n'est effectué), les journaux ressemblent à ceci:

2015-12-15 12:09:00.246 MSK LOG:  execute <unnamed>: BEGIN
2015-12-15 12:09:00.246 MSK LOG:  duration: 0.000 ms
2015-12-15 12:09:00.246 MSK LOG:  duration: 0.000 ms  parse <unnamed>: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:09:00.246 MSK LOG:  duration: 0.000 ms  bind <unnamed>: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:09:00.246 MSK DETAIL:  parameters: $1 = 'Customer0', $2 = 'Position 0', $3 = '0', $4 = '9e085ad0-437f-4d7d-afaa-e342e031cbee'
2015-12-15 12:09:00.246 MSK LOG:  execute <unnamed>: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:09:00.246 MSK DETAIL:  parameters: $1 = 'Customer0', $2 = 'Position 0', $3 = '0', $4 = '9e085ad0-437f-4d7d-afaa-e342e031cbee'
2015-12-15 12:09:00.246 MSK LOG:  duration: 0.000 ms
2015-12-15 12:09:00.248 MSK LOG:  duration: 0.000 ms  parse <unnamed>: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:09:00.248 MSK LOG:  duration: 0.000 ms  bind <unnamed>: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:09:00.248 MSK DETAIL:  parameters: $1 = 'Customer1', $2 = 'Position 1', $3 = '10', $4 = 'f29cfa40-7d24-49a6-ae5d-2a2021932d80'
2015-12-15 12:09:00.248 MSK LOG:  execute <unnamed>: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:09:00.248 MSK DETAIL:  parameters: $1 = 'Customer1', $2 = 'Position 1', $3 = '10', $4 = 'f29cfa40-7d24-49a6-ae5d-2a2021932d80'
2015-12-15 12:09:00.249 MSK LOG:  duration: 1.000 ms
2015-12-15 12:09:00.250 MSK LOG:  duration: 0.000 ms  parse <unnamed>: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:09:00.250 MSK LOG:  duration: 0.000 ms  bind <unnamed>: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:09:00.250 MSK DETAIL:  parameters: $1 = 'Customer2', $2 = 'Position 2', $3 = '20', $4 = '067dd6d4-5060-467f-b533-75994ecbaedc'
2015-12-15 12:09:00.250 MSK LOG:  execute <unnamed>: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:09:00.250 MSK DETAIL:  parameters: $1 = 'Customer2', $2 = 'Position 2', $3 = '20', $4 = '067dd6d4-5060-467f-b533-75994ecbaedc'
2015-12-15 12:09:00.250 MSK LOG:  duration: 0.000 ms
2015-12-15 12:09:00.250 MSK LOG:  duration: 0.000 ms  parse <unnamed>: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:09:00.250 MSK LOG:  duration: 0.000 ms  bind <unnamed>: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:09:00.251 MSK DETAIL:  parameters: $1 = 'Customer3', $2 = 'Position 3', $3 = '30', $4 = '7df32327-f2f5-4011-848d-55aafb3f09fa'
2015-12-15 12:09:00.251 MSK LOG:  execute <unnamed>: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:09:00.251 MSK DETAIL:  parameters: $1 = 'Customer3', $2 = 'Position 3', $3 = '30', $4 = '7df32327-f2f5-4011-848d-55aafb3f09fa'
2015-12-15 12:09:00.251 MSK LOG:  duration: 0.000 ms
2015-12-15 12:09:00.251 MSK LOG:  duration: 0.000 ms  parse S_1: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:09:00.251 MSK LOG:  duration: 0.000 ms  bind S_1: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:09:00.251 MSK DETAIL:  parameters: $1 = 'Customer4', $2 = 'Position 4', $3 = '40', $4 = '1e55ab6a-8780-4c8f-8af2-2886d954f819'
2015-12-15 12:09:00.251 MSK LOG:  execute S_1: insert into customer (name, position, salary, id) values ($1, $2, $3, $4)
2015-12-15 12:09:00.251 MSK DETAIL:  parameters: $1 = 'Customer4', $2 = 'Position 4', $3 = '40', $4 = '1e55ab6a-8780-4c8f-8af2-2886d954f819'
2015-12-15 12:09:00.251 MSK LOG:  duration: 0.000 ms
... the rest of the logs is identical and do not provide any valuable information...

Ainsi, la seule différence entre les deux est que lorsque le batch est désactivé, les postgres prendront un peu plus de temps pour réaliser qu'il doit réutiliser les instructions préparées.

J'ai donc décidé de lancer des tests de performances pour le confirmer.
J'ai essayé d'insérer 30 000 enregistrements dans une base de données vide.
Le traitement par lots étant désactivé, cela a pris 334 ms.
Avec le traitement par lots activé, il a fallu 4650 ms!

Alors j'ai supprimé tous les appels à entityManager.flush (ne laissant que entityManager.clear) et le temps est tombé à 320 ms. Je ne sais pas pourquoi le tutoriel d'hibernate conseille d'utiliser flush. Je suppose que c'est juste une erreur.

Donc, je suppose que la ligne de fond est la suivante: le traitement par lots fonctionne, mais il ne présente aucun avantage réel (au moins pour les postgres). De plus, une mauvaise utilisation (comme dans le tutoriel) peut conduire à des résultats terribles. Utilisez à vos risques et périls et mesurez toujours l'augmentation réelle des performances.

28
Alexey

Il n'y a rien de mal avec votre code et il fonctionne correctement.

Je l'ai débogué puis j'ai installé p6spy et ça marche. Voici comment vous pouvez également le tester:

  1. Dans build.gradle ajoutez cette dépendance:

    compile 'p6spy:p6spy:2.1.4'
    
  2. Modifiez les propriétés de connexion comme ceci:

    database.driver=com.p6spy.engine.spy.P6SpyDriver
    database.url=jdbc:p6spy:postgresql://localhost:5432/
    
  3. Ajouter spy.properties dans le resources. Vous pouvez le télécharger d'ici .

Et puis vous verrez les instructions par lots:

2015-12-14 19:38:03.655  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114683655|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer0', 'Position 0', 5000, '9f92ac01-8156-41f1-9bdb-36ff622a99cc')
2015-12-14 19:38:03.658  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114683658|2|statement|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer0', 'Position 0', 5000, '9f92ac01-8156-41f1-9bdb-36ff622a99cc')
2015-12-14 19:38:04.212  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684212|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer1', 'Position 1', 6000, 'e3a1dc5a-2183-4fb0-aa9a-4fb8cace23a3')
2015-12-14 19:38:04.213  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684213|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer2', 'Position 2', 7000, '8824f5be-afe5-4a6a-ab8a-8f266db5973f')
2015-12-14 19:38:04.213  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684213|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer3', 'Position 3', 8000, '249304b3-19c5-4376-b5dc-2da685c1db64')
2015-12-14 19:38:04.213  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684213|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer4', 'Position 4', 9000, '2bf15945-94c3-45f8-b0d1-e2fedbdcbaca')
2015-12-14 19:38:04.214  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684214|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer5', 'Position 5', 10000, '85b2b999-5d84-4181-9c71-1a83b4d20b86')
2015-12-14 19:38:04.214  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684214|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer6', 'Position 6', 11000, '8ed6289e-3d04-4ba5-9285-9bce202c8dae')
2015-12-14 19:38:04.215  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684215|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer7', 'Position 7', 12000, '2fc489a8-c6c4-4984-808d-2da9a2e8ad4a')
2015-12-14 19:38:04.215  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684215|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer8', 'Position 8', 13000, '897cd341-b65b-4521-87e6-f4fb78b09bfd')
2015-12-14 19:38:04.215  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684215|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer9', 'Position 9', 14000, 'fa59d5a7-2570-43f9-ba46-595b8fcefa35')
2015-12-14 19:38:04.216  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684216|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer10', 'Position 10', 15000, '0b5b38d1-d644-4ea0-a3f0-9aa025463b8a')
2015-12-14 19:38:04.216  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684216|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer11', 'Position 11', 16000, 'afbb349f-cf28-4cfb-b5b8-73b4df6fa4b1')
2015-12-14 19:38:04.216  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684216|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer12', 'Position 12', 17000, 'd6719dc4-1dfd-433f-a8ae-4c931f461e78')
2015-12-14 19:38:04.216  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684216|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer13', 'Position 13', 18000, 'ca277f3c-d51e-493d-a4f7-a945879bd7d0')
2015-12-14 19:38:04.217  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684217|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer14', 'Position 14', 19000, '07014145-332b-4b4c-b320-9412443c45b6')
2015-12-14 19:38:04.217  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684217|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer15', 'Position 15', 20000, '8ffde083-420f-418d-b624-b059b9e28f3b')
2015-12-14 19:38:04.217  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684217|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer16', 'Position 16', 21000, '6ac39900-69db-408a-bda1-4d2706da49ba')
2015-12-14 19:38:04.217  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684217|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer17', 'Position 17', 22000, '45f6db1b-18cd-4986-8f46-ce8f02d9588d')
2015-12-14 19:38:04.217  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684217|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer18', 'Position 18', 23000, 'b4312298-a818-4b7a-9cff-7923328de4dc')
2015-12-14 19:38:04.218  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684218|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer19', 'Position 19', 24000, 'efe7e3d2-da11-40ce-9fee-6f77726499db')
2015-12-14 19:38:04.218  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684218|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer20', 'Position 20', 25000, 'd51484c3-36e2-4737-b5c9-135709ad1d30')
2015-12-14 19:38:04.808  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684808|2|statement|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer20', 'Position 20', 25000, 'd51484c3-36e2-4737-b5c9-135709ad1d30')
2015-12-14 19:38:04.811  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684811|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer21', 'Position 21', 26000, '8c7e0e43-f89f-4000-8367-3406974102f4')
2015-12-14 19:38:04.811  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684811|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer22', 'Position 22', 27000, 'ab757793-1c45-4861-aff8-aa5cea3c8bd5')
2015-12-14 19:38:04.812  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684812|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer23', 'Position 23', 28000, 'edf18735-cc27-437b-9a28-156f57b51343')
2015-12-14 19:38:04.812  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684812|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer24', 'Position 24', 29000, 'c882f053-2e9a-405f-bb94-3ba83303aefe')
2015-12-14 19:38:04.812  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684812|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer25', 'Position 25', 30000, 'd6af1feb-5842-4b40-816d-8e2aaa2ce9b3')
2015-12-14 19:38:04.812  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684812|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer26', 'Position 26', 31000, '48f6a4cb-5671-4b73-bb51-3e37964fa136')
2015-12-14 19:38:04.813  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684812|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer27', 'Position 27', 32000, '6ac59ed6-2a0f-4dbb-a6d7-7231a9c9d2cc')
2015-12-14 19:38:04.813  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684813|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer28', 'Position 28', 33000, '57565a6a-4e44-4fe0-86bd-837a9687487d')
2015-12-14 19:38:04.813  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684813|0|batch|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer29', 'Position 29', 34000, 'f3c2dbdd-5d54-4bf3-86d2-327c60ee5cc0')
2015-12-14 19:38:04.814  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684814|1|statement|connection 7|insert into customer (name, position, salary, id) values (?, ?, ?, ?)|insert into customer (name, position, salary, id) values ('Customer29', 'Position 29', 34000, 'f3c2dbdd-5d54-4bf3-86d2-327c60ee5cc0')
2015-12-14 19:38:04.817  INFO 14116 --- [io-18080-exec-3] p6spy  : 1450114684817|2|commit|connection 7||

La troisième colonne est batch indiquant que l'instruction a été exécutée dans un lot JDBC.

La colonne juste avant celle mentionnant batch indique le nombre de millisecondes qu'il a fallu pour exécuter l'instruction. Ceux avec 0 sont pour quand l'instruction est ajoutée au lot.

Celles contenant statement dans la 3ème colonne (ayant donc un 1 ou un 2 dans la 2ème colonne) sont pour quand le batch a été exécuté, ce qui correspond à la 20ème et la 30ème itération.

14
Vlad Mihalcea