2011-04-08 3 views
1

오늘은 MySQL의 DB로 큰 크기의 데이터를로드하는 간단한 자바 응용 프로그램을 사용하고, 오류가 아래했습니다 : 서버에서 구문 오류 또는 액세스 위반 메시지 :MySQL의 메모리 소모 오류

java.sql.SQLException의를 : "메모리가"Q1 ', 2.34652631E10,'000 ','000 ', 5.0519608E9,5.8128358E9,'000 ','000 ', 8.2756818E9,2'5332 줄에 있음 "

my.ini 파일을 수정하여 일부 지점을 늘리려고 시도했지만 전혀 작동하지 않고 실제로 파일 크기가 너무 크지 않습니다. 단지 14mb xls 파일로 아이디어가 부족하여 제안을 기다리고 있습니다. 당신의 도움을 주셔서 감사합니다! (난 단지 추측 할 수있는 코드의 관련 부분없이, 그러나 여기에서 우리가 갈 ...)

+0

아마 중복 질문 : http://stackoverflow.com/questions/4154363/memory-limit-exhausted – hooknc

+0

아니, 남자가 자신의 솔루션을 내밀어하지 않았다. – Kenshin

+0

실행중인 쿼리의 크기는 얼마나됩니까? 5332 줄의 쿼리는 거대한 것을 제안합니다 (오류가 발생하는 Java 애플릿의 줄이 아니라면). –

답변

1

오류 메시지에서

, 나는 어둠 속에서 촬영을하고로드 할 것을 생각한다 단일 쿼리에서 300,000 개의 행을 모두 가져옵니다.이 문자열은 단일 문자열에 INSERT 문을 모두 연결하여 생성됩니다. SQL 문으로 변환 할 때 14MB XLS 파일이 으로 커질 수 있으며 서버의 메모리가 부족하여 쿼리를 구문 분석하려고합니다.

는 (우선 순위에 따라)이 문제를 해결하려면

  • 는 CSV로 파일을 변환하고 mysqlimport를 사용합니다.

  • 파일을 CSV로 변환하고 LOAD DATA INFILE을 사용하십시오.

  • 각각 수천 개의 INSERT 문을 사용하여 중간 크기의 여러 트랜잭션을 사용하십시오. 단순히 파일을 가져올 수없는 경우에 권장되는 옵션입니다.

  • 단일 트랜잭션 - InnoDB MySQL 데이터베이스 should handle transaction sizes in this size range을 사용하십시오.

+0

자바 코드로 원래의 XML 파일의 데이터를 변경해야하기 때문에 제 3의 제안은 저에게 잘 어울립니다. 많은 분들께 감사드립니다! – Kenshin