ホームページ >データベース >mysql チュートリアル >「rewriteBatchedStatements=true」はどのようにして MySQL JDBC ネットワークのパフォーマンスを最適化しますか?

「rewriteBatchedStatements=true」はどのようにして MySQL JDBC ネットワークのパフォーマンスを最適化しますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-14 11:20:42421ブラウズ

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

rewriteBatchedStatements=true

による MySQL JDBC ネットワーク パフォーマンスの最適化

JDBC (Java Database Connectivity) ドライバーは、rewriteBatchedStatements=true パラメーターを介して大幅なパフォーマンスの向上を実現します。 この設定により、ドライバーは複数のデータベース クエリを 1 つのネットワーク送信に統合し、ネットワークのオーバーヘッドを大幅に削減できます。

MySQL の max_allowed_packet 設定は、受信パケットの最大サイズを決定します。 バッチ化されたクエリ パケットがこの制限を超えると、エラーが発生する可能性があります。 ただし、JDBC ドライバーはこれをインテリジェントに処理します。max_allowed_packet を動的に決定し、制限を超えないようにバッチ処理戦略を調整します。

この動作を確認するには、MySQL の一般ログをアクティブにして、JDBC 接続を監視します。 Connector/J が max_allowed_packet を取得し、それに応じてバッチ処理を調整していることがわかります。

以下は、rewriteBatchedStatements=true の動作を示すコード例です。

<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>

rewriteBatchedStatements=true がない場合、このコードは個別の INSERT ステートメントを送信します。 これを有効にすると、JDBC はこれらを単一の複数行 INSERT に効率的にバンドルし、ネットワーク トラフィックを大幅に最小限に抑えます。

そのため、JDBC は MySQL で効率的なバッチ クエリ処理を保証し、開発者の手動介入を必要とせずにパフォーマンスの強化とシームレスな互換性を提供します。 ドライバーは、サーバーの max_allowed_packet 設定に基づいてバッチ サイズをインテリジェントに管理します。

以上が「rewriteBatchedStatements=true」はどのようにして MySQL JDBC ネットワークのパフォーマンスを最適化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。