J'ai une seule déclaration préparée par Oracle dans mon application qui va mettre à jour le statut d'environ 100 000 enregistrements dans la table d'un coup. Par exemple:
UPDATE <TABLE NAME> SET STATUS=SUCCESS" where STATUS="INIT"
La requête ci-dessus sera mise à jour autour de plus de100 000 enregistrements d'un coup. Existe-t-il un moyen d'améliorer les performances, comme définir la taille de la commande batch / fetch dans l'instruction préparée? comment puis-je le faire si j’utilise une requête préparée avec la requête ci-dessus que je n’exécuterai qu’une fois, car je ne définis aucun paramètre pour le traitement par lots?
Réponses:
0 pour la réponse № 1Une façon d'optimiser consiste à ne pas exécuter une requête à la fois (car la latence du système par requête est trop lente, etc.).
Vous pouvez utiliser la mise à jour par lots.
Si vous utilisez Spring, utilisez batchUpdate
ou si vous traitez directement avec JDBC, utilisez
preparedStatement.addBatch();
preparedStatement.executeBatch();
0 pour la réponse № 2
Briser la mise à jour en plusieurs morceaux peut aideren divisant les mises à jour en plusieurs transactions mais je commencerais par la configuration de votre base de données. Si les mises à jour prennent beaucoup de temps, il est possible que la taille de votre journal ne soit pas suffisamment élevée. Il pourrait également y avoir des goulots d'étranglement sur le disque.