rewriteBatchedStatements=true
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 サイトの他の関連記事を参照してください。