2012-11-25 2 views
1

10Gb 파일에서 java (jdbc)를 사용하여 postgres 데이터베이스 테이블로 일부 데이터를 가져 오려고합니다. 가져 오기 프로세스를 완료하는 데 12 시간 이상이 걸리므로 가져 오기 프로세스를 개선해야합니다. 복사 명령을 삽입하려고했습니다. 일부 선택 명령은 삽입 테이블과 함께 실행됩니다. 누구나 속도를 향상시킬 수있는 방법을 제안 할 수 있습니까?어떻게하면 postgres 데이터베이스로 가져 오기 프로세스 속도를 높일 수 있습니까?

답변

2

표준 SQL INSERT 일반적으로 SQL 문은 수백만 개의 행이 필요할 때 너무 큰 오버 헤드가 있습니다. 10 GiB의 데이터는 그다지 많지 않지만, INSERT (대용량 트랜잭션이 있거나 INSERT 할 때마다 커밋/롤백 할 수 있음)에 대해서는 너무 많습니다.

공식 문서에는 멋진 14.4. Populating a Database 장이 있습니다. 14.4.2. COPY는 특히 흥미 롭다 사용

사용 COPY 대신 INSERT의 일련의 명령을 사용하는 하나의 명령으로 모든 행을로드 할 수 있습니다. COPY 명령은 많은 수의 행을로드하는 데 최적화되어 있습니다. INSERT보다 유연성이 떨어지지 만 대용량 데이터로드에 대해서는 오버 헤드가 크게 줄어 듭니다. COPY은 단일 명령이므로이 방법을 사용하여 테이블을 채우는 경우 자동 커밋을 비활성화 할 필요가 없습니다.

은 참조 :

+0

내가 복사 명령을 사용하기 전에 인덱스를 삭제하고, select 명령에 영향을 미칠 것이다 ?? – AKR

+0

@ user1782877 : * 14.4.3에 따릅니다. 인덱스 제거 * 가져 오기는 더 빠르지 만'select' 명령문은 느리게 실행됩니다 (적어도 가져 오기를 수행 할 때는). –

관련 문제