2010-08-09 8 views
6

J'ai essayé d'utiliser Spring 3.0 SimpleJdbcTemplate et il faut 5 minutes pour insérer 1500 enregistrements, alors que cela me prend quelques secondes. insérer en utilisant JDBC droit. Je ne sais pas ce que je fais mal.Spring JDBC vs JDBC

+1

pouvez-vous insérer votre code? – dierre

+6

Ceci n'est pas une question, et ne nous fournit aucun code à examiner, comment voulez-vous que nous vous aidions? S'il vous plaît envisager de fournir plus de détails. – Andrew

+0

Cela ne veut pas dire que cela prendrait 5 minutes à insérer, mais il y aura un délai si vous utilisez un cadre au-dessus de "straight jdbc". Postez vos requêtes/code afin que nous puissions voir ce qui se passe. –

Répondre

6

Si vous créez un lot, pensez à utiliser le lot Spring - JdbcBatchItemWriter avec les paramètres de taille de tronçon appropriés, qui chargeront ces 1500 enregistrements en moins d'une seconde.

1

Certaines choses de contrôle vaut:

  • Les frais généraux pourrait être sur la transaction gérée par Spring au niveau de l'application. Regardez quel type de gestionnaire de transactions vous utilisez (recherchez un bean avec le nom transactionManager). Si vous utilisez JTA, c'est probablement là que réside votre problème. Comme c'est rapide avec JDBC, le goulot d'étranglement ne semble pas être le db. Selon la façon dont votre application utilise cette transaction, elle peut contenir tout en mémoire avant de terminer les 1500 requêtes et validations. Voyez-vous une grande différence dans l'utilisation de la mémoire (celle du printemps devrait être beaucoup plus élevée)?
  • Quel type de pool de connexions DB utilisez-vous dans les deux cas?

moyen rapide de profil de votre application:

Obtenez le pid - "jps -l"

mémoire: jmap -histo PID (vérifier s'il y a une certaine forme de fuite de mémoire)

Vérifiez ce qui se passe sous le capot: jstack PID (recherchez les appels de méthode lents ou récursifs)

-2

Comment utiliser

jdbcTemplate.batchUpdate(new String[]{sql});