JDBC 배치 인서트가 느릴 때 rewriteBatchedStatements
조회 2 · 댓글 0
MySQL/MariaDB에 PreparedStatement.addBatch() + executeBatch()로 대량 INSERT를 넣는데 기대만큼 안 빨라질 때가 있습니다. 드라이버가 배치라도 내부적으로 개별 문장을 한 건씩 네트워크로 보내기 때문입니다. MySQL Connector/J의 rewriteBatchedStatements를 켜면 executeBatch() 호출 시 INSERT/REPLACE 배치를 하나의 다중 값 문장으로 재작성해 라운드트립을 줄입니다. 이 옵션의 기본값은 false라 명시하지 않으면 꺼져 있습니다.
JDBC URL 파라미터로 붙이면 됩니다.
jdbc:mysql://db-host:3306/appdb?rewriteBatchedStatements=true주의할 점이 있습니다. 공식 문서 기준으로 INSERT ... ON DUPLICATE KEY UPDATE를 재작성하면 서버가 배치 전체에 대해 영향 행 수를 하나로만 돌려줘 각 문장에 정확히 매핑되지 않고, 재작성된 문장에서는 Statement.getGeneratedKeys()가 배치 전체가 INSERT나 REPLACE일 때만 동작합니다. 또한 plain Statement에 값을 직접 이어붙이면 SQL 인젝션 여지가 있으니 반드시 PreparedStatement로 바인딩해 쓰는 것이 안전합니다.
🔗 https://dev.mysql.com/doc/connectors/en/connector-j-connp-props-performance-extensions.html
로그인 후 답글을 남길 수 있습니다.