에서 제공 :JDBC + 대형 PostgreSQL의 쿼리는 메모리
connection.setAutoCommit(false);
st = connection.createStatement(
ResultSet.CONCUR_READ_ONLY,
ResultSet.TYPE_FORWARD_ONLY
);
st.setFetchSize(100);
logMemory();
System.out.println("start query ");
rs = st.executeQuery(queryString);
System.out.println("done query ");
logMemory();
을하지만,이 메모리를 많이 사용
Free memory; 4094347680 (= 3905 mb).
start query
done query
Free memory; 2051038576 (= 1956 mb).
을 (Runtime.getRuntime(). freeMemory())와 함께 인쇄됩니다.
지금까지는 작동하지만 데이터베이스는 훨씬 커질 것입니다. 나는 전체 결과를 기억할 필요가 없다. 각 행을 처리하고 결과를 디스크에 쓰고 다음 행으로 이동하면됩니다.
'setFetchSize'는 힌트 일 뿐이며, postgresql/jdbc가 무시할 경우 이상하게 느껴질 것입니다.
이 문제를 해결할 수있는 방법은 없나요? 내 유일한 생각은 지금까지 쿼리 결과를 디스크로 스트리밍하고 Java에서 파일을 구문 분석하는 배치 스크립트를 작성하는 것입니다 ...
궁금한 점은 실행중인 최대 힙 크기는 얼마입니까? 아니면 기본값을 사용하고 있습니까? –
-Xmx4096M -Xms4096M, Vista 8GB 시스템입니다. – kresjer