Optimisation du traitement par lots JDBC avec rewriteBatchedStatements=true
Le paramètre JDBC rewriteBatchedStatements=true
améliore considérablement l'efficacité du traitement des données par lots en consolidant plusieurs instructions SQL en une seule transmission réseau, réduisant ainsi la latence du réseau.
L'activation de ce paramètre demande au pilote JDBC de regrouper de nombreuses requêtes en un seul paquet plutôt que de les envoyer individuellement. Prenons l'exemple suivant, où des lignes individuelles sont insérées dans la table « jdbc » à l'aide d'instructions INSERT distinctes :
<code class="language-java">try (Connection con = ...; PreparedStatement ps = con.prepareStatement("INSERT INTO jdbc (`name`) VALUES (?)")) { for (int i = 1; i < 1000; i++) { ps.setString(1, "Line " + i + ": ..."); ps.addBatch(); } ps.executeBatch(); }</code>
Avec rewriteBatchedStatements=true
activé, le pilote JDBC transmet un seul paquet contenant une instruction INSERT combinée comme ceci :
<code class="language-sql">INSERT INTO jdbc (`name`) VALUES ('Line 1: ...'), ('Line 2: ...'), ... ,('Line 999: ...')</code>
Il est essentiel que le pilote MySQL Connector/J (et les autres pilotes conformes) respecte les paramètres max_allowed_packet
du serveur. Il vérifie cette limite lors de la connexion et ajuste dynamiquement la taille du lot pour éviter de dépasser la taille maximale des paquets. Si un seul INSERT à plusieurs lignes s'avère trop volumineux, le pilote le fragmente automatiquement en paquets plus petits et conformes.
En exploitant rewriteBatchedStatements=true
et en configurant une valeur max_allowed_packet
appropriée, les développeurs peuvent améliorer considérablement les performances d'interaction avec les bases de données pour les opérations par lots, en minimisant la surcharge du réseau et en maximisant le débit.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!