JDBC 的 rewriteBatchedStatements 配置透過將多個查詢打包到單一資料包中來最佳化開銷。這引起了對 MySQL 伺服器 max_allowed_packet 限制的擔憂。
使用 RewriteBatchedStatements 減少網路開銷
當 rewriteBatchedStatements 設定為 true 時,JDBC 將查詢組合到單一網路封包中。例如:
<code class="java">ps.setString(1, "..."); ps.addBatch(); ps.setString(1, "..."); ps.addBatch(); ps.executeBatch();</code>
不使用rewriteBatchedStatements:
<code class="sql">INSERT INTO jdbc (`name`) VALUES ('Line 1: ...') INSERT INTO jdbc (`name`) VALUES ('Line 2: ...')</code>
使用rewriteBatchedStatements:
<code class="sql">INSERT INTO jdbc (`name`) VALUES ('Line 1: ...'),('Line 2: ...')</code>
JDBC 對max_allowed_packet 的感知
是的,JDBC 知道max_allowed_packet 值,並相應地調整組合查詢的大小。
範例
透過啟用 MySQL 的通用日誌,您可以觀察 JDBC連線時檢查 max_allowed_packet。此外,如果將 max_allowed_packet 設定為較低的值,如果組合大小超過限制,JDBC 會將批次查詢拆分為更小的封包。
以上是JDBC 如何使用 MySQL 的 max_allowed_packet 限制管理批次語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!