ホームページ > データベース > mysql チュートリアル > 「rewriteBatchedStatements=true」はどのようにして JDBC バッチ処理を最適化しますか?

「rewriteBatchedStatements=true」はどのようにして JDBC バッチ処理を最適化しますか?

Patricia Arquette
リリース: 2025-01-14 10:54:44
オリジナル
570 人が閲覧しました

How Does `rewriteBatchedStatements=true` Optimize JDBC Batch Processing?

rewriteBatchedStatements=true

による JDBC バッチ処理の最適化

JDBC パラメータ rewriteBatchedStatements=true は、複数の SQL ステートメントを 1 つのネットワーク送信に統合することにより、バッチ データ処理の効率を大幅に向上させ、ネットワーク遅延を削減します。

このパラメータを有効にすると、多数のクエリを個別に送信するのではなく、単一のパケットにバンドルするよう JDBC ドライバに指示されます。 次の例を考えてみましょう。ここでは、個別の INSERT ステートメントを使用して個々の行が「jdbc」テーブルに挿入されます。

<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>
ログイン後にコピー

rewriteBatchedStatements=true をアクティブにすると、JDBC ドライバーは次のような結合された INSERT ステートメントを含む単一のパケットを送信します。

<code class="language-sql">INSERT INTO jdbc (`name`) VALUES ('Line 1: ...'), ('Line 2: ...'), ... ,('Line 999: ...')</code>
ログイン後にコピー

重要なのは、MySQL Connector/J ドライバー (およびその他の準拠ドライバー) はサーバーの max_allowed_packet 設定を尊重することです。 接続時にこの制限をチェックし、最大パケット サイズを超えないようにバッチ サイズを動的に調整します。単一の複数行 INSERT が大きすぎる場合、ドライバーは自動的にそれをより小さな準拠パケットに断片化します。

rewriteBatchedStatements=true を活用し、適切な max_allowed_packet 値を構成することで、開発者はバッチ操作のデータベース対話パフォーマンスを大幅に向上させ、ネットワークのオーバーヘッドを最小限に抑え、スループットを最大化できます。

以上が「rewriteBatchedStatements=true」はどのようにして JDBC バッチ処理を最適化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート