pourquoi le printemps jdbcTemplate batchUpdate insérer une ligne par ligne
J'ai 200K lignes à insérer dans une seule table de base de données. J'ai essayé d'utiliser jdbcTemplate.batchUpdate
au printemps afin de faire de l'insertion de 10 000 par lot. Cependant, ce processus consomme trop de temps (7 minutes pour 200K lignes). Donc, sur la base de données côté, je vérifie le nombre de lignes insérées par select count(*) from table_X
. J'ai trouvé le nombre de lignes légèrement augmenté instaed de 10K prévu. Quelqu'un peut-il expliquer ce que la raison ou est-ce quelque chose qui devrait être configurés sur le côté de la Base de données ?
PS: je suis à l'aide de sybase ....
Afficher votre code, utilisez-vous la BatchPreparedStatementSetter ? Êtes-vous à l'aide de @Transactional annotation sur votre service ou DAO?
Au lieu d'utiliser le printemps, je suis passé à la native api jdbc et les poignées de la transactioin moi-même. Il fonctionne maintenant. bien que cela reste très lent....
effectivement j'ai enlevé @Transactional annotation qui pourrait causer le problème....Mais je l'ai enlevé afin d'accélérer le inseration. ...Il ne l'a pas aider
Vérifiez le paramètre de connexion jdbc, ne me souviens pas mais il y a certains paramètres qui ont aidé à accélérer le traitement...
en fait, ma connexion jdbc est obtenu par l'intermédiaire d'jdbcTemplate qui a été construit par le Printemps. J'ai tenté de EnableBulkLoad paramètre dans le fichier de configuration...mais il ne fonctionne pas ou ce paramètre n'a pas été correctement programmés. 🙁
Au lieu d'utiliser le printemps, je suis passé à la native api jdbc et les poignées de la transactioin moi-même. Il fonctionne maintenant. bien que cela reste très lent....
effectivement j'ai enlevé @Transactional annotation qui pourrait causer le problème....Mais je l'ai enlevé afin d'accélérer le inseration. ...Il ne l'a pas aider
Vérifiez le paramètre de connexion jdbc, ne me souviens pas mais il y a certains paramètres qui ont aidé à accélérer le traitement...
en fait, ma connexion jdbc est obtenu par l'intermédiaire d'jdbcTemplate qui a été construit par le Printemps. J'ai tenté de EnableBulkLoad paramètre dans le fichier de configuration...mais il ne fonctionne pas ou ce paramètre n'a pas été correctement programmés. 🙁
OriginalL'auteur Ensom Hodder | 2016-09-19
Vous devez vous connecter pour publier un commentaire.
Il ya beaucoup d'approches disponibles dans le web.
Les performances dépendent directement de la
Sans regarder votre code n'importe qui peut deviner, Mais que Personne ne peut trouver la solution exacte.
1
référence
https://www.mkyong.com/spring/spring-jdbctemplate-batchupdate-example/
http://docs.spring.io/spring-framework/docs/3.0.0.M4/reference/html/ch12s04.html
Approche 2.1
Alternativement, vous pouvez exécuter l'instruction SQL directement.
refernce
https://www.mkyong.com/spring/spring-simplejdbctemplate-batchupdate-example/
Démarche 2.2
Démarche 2.3
méthode 3 :JDBC
refernce
https://www.mkyong.com/jdbc/jdbc-preparedstatement-example-batch-update/
Je suis à l'aide de Sybase 15.5, et pense que cela pourrait être un problème avec Sybase, car j'ai testé avec PostgreSQL avec le même code. PostgreSQL prend moins de 1 sec pour les 10K lignes. J'avais demandé DBA équipe pour les conseils. Merci pour vos exemples ci-dessus.
OriginalL'auteur Sanka
Essayez de définir ci-dessous pour la chaîne de connexion -
useServerPrepStmts=false&rewriteBatchedStatements=true
. N'ai pas essayé mais ses de mes favoris. Vous pouvez rechercher sur ces lignes..Hmm, mais tout de même vérifier que la poste et des liens dans ce post - it peut aider
oui merci pour vos conseils, je mettrai à jour ce post quand je trouve une solution
OriginalL'auteur Sheetal Mohan Sharma