목록으로

Programming Notes

Terastream을 이용한 Oracle 병렬 로드 성능 개선: sqlldr와 Parallel 처리의 조화

대용량 데이터 로드 작업을 수행하는 프로젝트에서, Terastream을 활용하여 Oracle 데이터베이스로 데이터를 효율적으로 적재하는 방법을 개선하는 과정을 공유하고자 합니다. 특히, sqlldr 유틸리티를 이용한 데이터 로드 시 병렬 처리(Parallel...

대용량 데이터 로드 작업을 수행하는 프로젝트에서, Terastream을 활용하여 Oracle 데이터베이스로 데이터를 효율적으로 적재하는 방법을 개선하는 과정을 공유하고자 합니다. 특히, sqlldr 유틸리티를 이용한 데이터 로드 시 병렬 처리(Parallel Processing)를 적용하여 성능 향상을 도모한 경험을 바탕으로, 실제 테스트 결과를 중심으로 설명드리겠습니다.

우선, 기본적인 sqlldr를 이용한 데이터 로드 작업에서는 병렬 처리 옵션을 명시적으로 설정하지 않아도, Oracle 서버의 설정에 따라 단일 세션으로 데이터를 적재했습니다. 테스트 결과, 초당 약 30,154건의 데이터를 로드하는 성능을 확인했습니다. 이는 상당히 느린 속도였고, 대용량 데이터 로드에는 적합하지 않다는 판단을 내렸습니다.

따라서, sqlldr의 병렬 처리 기능을 활용하기 위해 다양한 병렬 처리 개수를 설정하여 테스트를 진행했습니다. 먼저, 병렬 처리 개수를 4로 설정했을 때, 4개의 Oracle 세션 프로세스가 생성되어 동시에 데이터를 로드하는 것을 확인했습니다. 이 경우, 초당 적재 건수는 약 84,225건으로 크게 증가했습니다. 이는 단일 세션 처리 대비 약 2.8배의 성능 향상을 보여주는 결과였습니다.

더 나아가, 병렬 처리 개수를 10으로 증가시킨 테스트에서는, 예상대로 10개의 Oracle 세션 프로세스가 생성되어 동작했습니다. 실행 로그에는 Parallel #1부터 Parallel #10까지의 병렬 처리 과정이 명확하게 기록되었으며, 초당 적재 건수는 무려 116,312건까지 증가했습니다. 이는 단일 세션 처리 대비 약 3.9배, 병렬 처리 개수 4 대비 약 1.4배의 성능 향상을 의미합니다. 흥미로운 점은, Optionsparallel=true를 명시적으로 설정하지 않아도, Oracle 서버 설정 및 sqlldr의 자동 감지 기능을 통해 병렬 처리가 가능하다는 점입니다. 하지만, 명시적으로 설정하는 것이 관리 및 예측 가능성 측면에서 더 효율적이라 판단됩니다. ctl 파일은 각 테스트 후 자동 삭제되도록 설정하여 작업 후 불필요한 파일을 제거하였습니다.

결론적으로, Terastream을 이용한 Oracle 데이터 로드 작업에서 sqlldr의 병렬 처리 기능을 적절히 활용함으로써 성능을 획기적으로 향상시킬 수 있었습니다. 병렬 처리 개수를 조정하여 최적의 성능을 얻을 수 있으며, 대용량 데이터 로드 작업의 효율성을 크게 개선할 수 있다는 것을 확인했습니다. 앞으로도 지속적인 테스트와 모니터링을 통해 최적의 병렬 처리 개수를 도출하고, 더욱 효율적인 데이터 로드 환경을 구축해 나갈 계획입니다.