123p
대용량 테이블에서 3~5% 이상의 데이터를 추출하는 경우 인덱스를 이용하면 처리 범위 및 랜덤 엑세스의 증가로 인해서 엄청난 성능 저하가 발생한다.
이런 경우엔는 테이블 전체 스캔을 고려한다.
테이블 전체 스캔
첫번째 방법은 힌트 /*+ FULL(테이블 이름) +/
두번째 방법은 인덱스 컬럼에 데이터를 변경시키지 않는 함수를 사용
인덱스 컬럼이 함수에 의해 가공되면 해당 인덱스를 이용할 수 없다.
대용량 테이블에서 많은 양의 데이터를 추출할 경우에 테이블을 전체 스캔하는 이유는 랜덤 엑세스 때문이다.
테이블 전체 스캔은 랜덤 엑세스를 제거할 수 있으므로 많은 데이터에 엑세스하는 SQL의 경우에 인덱스를 이용하는 것보다 더 좋은 성능을 보장받을 수 있다.
또한, 테이블 전체 스캔은 다중 블록 I/O를 수행하기 때문에 대용량의 데이터를 추출하는 SQL에 대해서는 인덱스 스캔보다 성능적으로 유리할 수 있다.
126P
기본적으로 오라클에서는 하나의 SQL에는 하나의 프로세스가 기동되어 필요한 데이터에 엑세스한다.
병렬 프로세싱을 이용하면 설정한 개수만큼의 프로세스가 기동하여 작업을 나누어 수행한다.
운영 체제에서 여러 개의 프로세스를 기동하기 위해서는 운영 체제의 자원을 사용해야 한다. 그렇기 때문에 여러 개의 프로세스를 기동시키기 위한 시간이 소요된다. 프로세스를 많이 기동시킬수록 운영 체제의 병렬 프로세스 기동 시간은 증가한다. 따라서, 크기가 작은 테이블에 병렬 프로세싱을 적용하면 테이블에 엑세스하는 시간보다 프로세스를 기동시키는 시간이 더 많이 소요될 수 있기 때문에 성능이 저하될 수 있다.
1GB 이상의 테이블에서 병렬 프로세싱을 이용하는 것이 효과적.
병렬 프로세싱을 사용하기 위한 데이터베이스 파라메터 설정 확인이 필요.
PARALLEL_MIN_SERVER - 시스템에서 사용할 수 있는 최소 병렬 프로세싱 개수
PARALLEL_MAX_SERVER - 최대 병렬 프로세싱 개수
PARALLEL_AUTOMATIC_TUNING - 병렬 프로세싱의 메시지 저장 공간과 병렬 프로세스 사이의 통신을 위한 I/O 단위를 설정
PARALLEL_AUTOMATIC_MESSAGE_SIZE - 병렬 프로세스 사이의 통신을 위한 I/O 크기
----
PARALLEL_AUTOMATIC_TUNING = TRUE/FALSE
TRUE - 병렬 프로세스 사이에 통신을 수행하기 위해 사용하는 메시지는 오라클 메모리 공간 중에서 LARGE POOL 공간을 사용한다.
FALSE - SHARED POOL 공간을 사용
SQL에 대한 파싱 정보를 저장하는 SHARED POOL 영역을 사용한다면 메모리 사용에 비효울이 발생한다.
TRUE로 설정하면 병렬 프로세스 사이에서 통신을 하기 위한 I/O의 크기가 1KB에서 2KB로 변경된다.
128P
댓글 없음:
댓글 쓰기