2015. 1. 16. 17:59 오라클
SQL*Loader 의 성능 최적화
SQL*Loader 의 성능 최적화를 위한 몇가지 고려사항이 있습니다 (direct 및 conventional path):
o 논리적 레코드의 효율적 처리
- 물리적 레코드와 논리적 레코드의 일대일 매핑. 연결된 경우의 진행을 막습니다.
- 소프트웨어가 물리적 레코드의 경계를 쉽게 알아낼 수 있도록 합니다.
그것은 "FIXnnn" 이나 "VAR" 의 문자열 옵션을 사용한 파일 처리를 사용하는 것입니다.
기본(스트림 모드)으로 사용하는 경우, 대부분의 플랫폼에서 (예, UNIX) SQL*Loader 는 개행문자를 위해 각 물리적 레코
드를 스캔해야 합니다.
o 효율적인 필드 설정
필드 설정은 데이터파일의 필드를 데이터베이스 내의 컬럼들과 매핑하는 과정입니다.
매핑 함수는 컨트롤파일의 필드 설명에 의해 제어됩니다.
필드 설정은 대부분의 로드에서 가장 CPU 시간을 많이 소모합니다.
- 탭필드를 사용하지 말고; 위치필드를 사용합니다.
탭필드를 사용하면 SQL*Loader 는 구분자/괄호를 찾기 위하여 입력 데이터를 스캔해야 합니다.
위치 필드를 사용하면 SQL*Loader 는 다음 필드로 가기 위해 포인터만 증가시키면 됩니다.(매우 빠름)
- 위치 필드를 사용하는 경우 공백을 트리밍하지 마십시오.
PRESERVE BLANKS 옵션을 사용하십시오.
위의 요점 1과 2의 공통된 주제는 입력 데이터의 스캔을 막는 것임을 유념하여 주시기 바랍니다.
o 효율적인 변환
SQL*Loader 가 제공하는 몇가지 변환이 있습니다;
캐릭터셋 변환과 데이터타입 변환
- 가능하면 캐릭터셋 변환은 피하십시오. SQL*Loader 는 3가지 캐릭터셋을 지원합니다:
a) 클라이언트 캐릭터셋 (sqlldr 프로세스의 NLS_LANG)
b) 서버 캐릭터셋
c) 데이터파일 캐릭터셋
3가지가 모두 동일할 때 성능이 최적화 됩니다. 특히 b) 와 c) 가 중요합니다.
이 3가지가 모두 동일하면 캐릭터셋 변환을 위한 메모리 버퍼도 할당되지 않습니다.
- 멀티 바이트 캐릭터셋 설정을 피하십시오.
- 데이터타입 변환에 있어서는(SQL*Loader 데이터타입을 데이터베이스컬럼 데이터타입으로) char 에서 char 로의 변환이 효율적입니다.
만일 데이터파일과 서버에 대하여 같은 캐릭터셋이 사용중이면 변환이 일어나지 않으므로 빠릅니다.
그러므로 변환을 최소화할 수 있도록 하십시오.
o 가능하다면 direct path load 에서 "unrecoverable" 옵션을 사용
o conventional path load 라도 네트워크를 통하지 말고 SQL*Loader 를 서버에서 직접 실행
o 데이터베이스 이외의 파일 I/O 를 줄이기
- 가능하면 SILENT=ERRORS 를 사용하여 에러 메시지가 로그에 기록되지 않도록 하십시오. 알려진 중복 로딩인 경우에 유용합니다.
- 또한 BAD=/dev/nul (UNIX) 이나 BAD=NUL (DOS) 사용으로 잘못된 레코드가 I/O 를 생성하지 않도록 하십시오.
o 인덱스와 제약조건을 비활성화. conventional load 의 경우에는 인덱스와 제약조건의 비활성화가 성능을 향상시킬 수 있습니다.
o 큰 바인드 배열의 사용
conventional load 의 경우 큰 바인드 배열은 데이터베이스 호출 횟수를 제한하여 성능을 증가시킵니다.
바인드 배열의 크기는 BINDSIZE 파라미터로 지정합니다.
o 커밋이 너무 자주 일어나지 않도록 ROWS=<n> 사용
conventional 데이터 로드에서 rows 파라미터는 커밋당 row 의 갯수를 지정합니다.
더 적은 커밋은 성능을 향상시킬 것입니다.
o 병렬 로드 사용
direct path load 에서 사용할 수 있는 이 옵션은 여러 SQL*Loader 작업이 동시에 수행될 수 있도록 합니다.
$ sqlldr control=first.ctl parallel=true direct=true
$ sqlldr control=second.ctl parallel=true direct=true
...
o 고정 너비 데이터 사용
고정 너비 데이터 포맷은 오라클의 데이터 파싱 프로세스를 단축해줍니다.
데이터 타입과 열 갯수에 따라 단축량은 매우 커질 수 있습니다.
o 로드 중에 아카이빙 비활성화
특정 환경에서는 이것이 실현 가능하지 않을 수도 있지만, 데이터베이스 아카이빙을 비활성화 하는 것은 상당한 성능 향상을 가져올 수 있습니다.