> 데이터 베이스 > MySQL 튜토리얼 > OutOfMemoryError를 방지하기 위해 MySQL에서 대규모 결과 세트를 효율적으로 스트리밍하려면 어떻게 해야 합니까?

OutOfMemoryError를 방지하기 위해 MySQL에서 대규모 결과 세트를 효율적으로 스트리밍하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2024-11-27 08:14:11
원래의
661명이 탐색했습니다.

How Can I Efficiently Stream Large Result Sets from MySQL to Avoid OutOfMemoryErrors?

MySQL에서 대규모 결과 세트 스트리밍

MySQL에서 대규모 결과 세트를 검색하는 것은 어려울 수 있으며, 특히 애플리케이션 메모리가 제한된 경우 더욱 그렇습니다. 이 문제는 JDBC 드라이버가 전체 테이블을 메모리에 로드하려고 시도하여 OutOfMemoryException이 발생하는 경우에 자주 발생합니다.

setFetchSize() 사용

이 문제에 대한 일반적인 해결 방법 중 하나 문제는 setFetchSize() 메서드를 사용하여 데이터베이스. 그러나 스트리밍을 활성화하려면 MySQL JDBC 드라이버에 추가 설정이 필요하므로 이 접근 방식만으로는 항상 충분하지 않습니다.

전방향 전용, 읽기 전용 문 생성

MySQL에서 결과 세트 스트리밍을 활성화하려면 다음을 사용하여 명령문을 생성해야 합니다. 설정:

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
로그인 후 복사

가져오기 크기 설정

문이 생성되면 setFetchSize() 메서드를 사용하여 다음을 힌트해야 합니다. 큰 결과 세트가 필요할 수 있는 드라이버 검색됨:

stmt.setFetchSize(Integer.MIN_VALUE);
로그인 후 복사

스트리밍 주의 사항

결과 집합 스트리밍의 제한 사항과 주의 사항을 인식하는 것이 중요합니다.

  • 동일한 결과 집합에 대해 다른 쿼리를 실행하기 전에 전체 결과 집합을 읽거나 닫아야 합니다. 연결.
  • 거래 내에서 명세서를 사용하는 경우 잠금 문제가 발생할 수 있습니다. 잠금은 트랜잭션이 완료되거나 보류 중인 모든 결과를 읽거나 결과 집합이 닫힐 때만 해제됩니다.

추가 고려 사항

사용에도 불구하고 OutOfMemoryError가 지속되는 경우 위의 설정은 데이터가 사용 가능해졌을 때 애플리케이션이 데이터를 즉시 처리하지 않음을 나타낼 수 있습니다. 이를 위해서는 전체 결과 세트가 메모리에 유지되지 않도록 데이터를 증분적으로 처리하도록 코드를 재구성해야 합니다.

위 내용은 OutOfMemoryError를 방지하기 위해 MySQL에서 대규모 결과 세트를 효율적으로 스트리밍하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿