Maison >base de données >tutoriel mysql >Comment « rewriteBatchedStatements=true » optimise-t-il les performances du réseau MySQL JDBC ?

Comment « rewriteBatchedStatements=true » optimise-t-il les performances du réseau MySQL JDBC ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-14 11:20:42448parcourir

How Does `rewriteBatchedStatements=true` Optimize MySQL JDBC Network Performance?

Optimisation des performances du réseau MySQL JDBC avec rewriteBatchedStatements=true

Le pilote JDBC (Java Database Connectivity) offre des gains de performances substantiels via le paramètre rewriteBatchedStatements=true. Ce paramètre permet au pilote de consolider plusieurs requêtes de base de données en une seule transmission réseau, réduisant ainsi considérablement la surcharge du réseau.

Le paramètre max_allowed_packet de MySQL dicte la taille maximale des paquets entrants. Si un paquet de requêtes par lots dépasse cette limite, des erreurs peuvent se produire. Cependant, le pilote JDBC gère cela intelligemment : il détermine dynamiquement max_allowed_packet et ajuste sa stratégie de traitement par lots pour éviter de dépasser la limite.

Pour confirmer ce comportement, activez le journal général MySQL et surveillez la connexion JDBC. Vous observerez Connector/J récupérer max_allowed_packet et adapter son traitement par lots en conséquence.

Vous trouverez ci-dessous un exemple de code illustrant rewriteBatchedStatements=true en action :

<code class="language-java">String connectionString = "jdbc:mysql://localhost:3307/mydb?" +
        "useUnicode=true&characterEncoding=UTF-8" +
        "&rewriteBatchedStatements=true";

try (Connection con = DriverManager.getConnection(connectionString, "root", "whatever")) {
    try (PreparedStatement ps = con.prepareStatement("INSERT INTO jdbc (`name`) VALUES (?)")) {
        for (int i = 1; i <= 1000; i++) {
            ps.setString(1, "Name" + i);
            ps.addBatch();
        }
        ps.executeBatch();
    }
}</code>

Sans rewriteBatchedStatements=true, ce code enverrait des relevés INSERT individuels. Une fois activé, JDBC les regroupe efficacement en une seule INSERT multiligne, minimisant ainsi considérablement le trafic réseau.

Par conséquent, JDBC garantit une gestion efficace des requêtes par lots dans MySQL, offrant des améliorations de performances et une compatibilité transparente sans nécessiter l'intervention manuelle du développeur. Le pilote gère intelligemment la taille des lots en fonction du paramètre max_allowed_packet du serveur.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn