>데이터 베이스 >MySQL 튜토리얼 >성능 향상을 위해 MySQL용 JDBC 일괄 삽입을 어떻게 최적화할 수 있습니까?

성능 향상을 위해 MySQL용 JDBC 일괄 삽입을 어떻게 최적화할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-25 03:08:09804검색

How Can I Optimize JDBC Batch Inserts for MySQL to Improve Performance?

MySQL의 JDBC 일괄 삽입 성능 향상

대량의 데이터를 데이터베이스에 삽입하려면 효율적인 일괄 삽입 작업이 필요합니다. 그러나 성능 병목 현상이 발생하는 것은 흔한 일입니다. MySQL 데이터베이스에 대한 JDBC 일괄 삽입 구현을 최적화하는 방법을 살펴보겠습니다.

제공된 코드에 설명된 것처럼 일반적인 기술은 백만 행 단위로 데이터를 일괄 삽입하는 것입니다. 그러나 코드 조각에 따르면 문제는 해결되지 않은 상태로 남아 있습니다.

서버 측 준비된 문 최적화

중요한 단계는 준비된 문이 처리되는 방식을 최적화하는 것입니다. 기본적으로 MySQL은 클라이언트 측 준비된 문을 생성할 수 있으며 이로 인해 오버헤드가 발생할 수 있습니다. useServerPrepStmts 속성을 활성화하면 MySQL이 더 효율적인 서버측 준비된 명령문을 사용하게 됩니다.

일괄 명령문 재작성

MySQL에는 배치 삽입을 크게 향상시킬 수 있는 "배치 명령문 재작성"이라는 기능이 있습니다. 성능. rewriteBatchedStatements 속성을 통해 활성화되면 MySQL은 개별 삽입 문을 단일 배치 문으로 다시 작성하여 네트워크 왕복을 줄입니다.

최적화로 수정된 코드 조각

다음은 제안된 최적화가 포함된 수정된 코드 조각입니다.

Connection c = DriverManager.getConnection(
    "jdbc:mysql://host:3306/db?useServerPrepStmts=false&rewriteBatchedStatements=true",
    "username",
    "password"
);

...

// Disable auto-commit
c.setAutoCommit(false);

// Create a prepared statement
String sql = "INSERT INTO mytable (xxx), VALUES(?)";
PreparedStatement pstmt = c.prepareStatement(sql);

Object[] vals = set.toArray();
for (int i = 0; i < vals.length; i++) {
    pstmt.setString(1, vals[i].toString());
    pstmt.addBatch();
}

// Execute the batch
int[] updateCounts = pstmt.executeBatch();
System.out.append("inserted " + updateCounts.length);

이러한 최적화를 적용하면 상당한 개선을 경험할 수 있습니다. MySQL 데이터베이스에 대한 JDBC 일괄 삽입 성능.

위 내용은 성능 향상을 위해 MySQL용 JDBC 일괄 삽입을 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.