본문 바로가기

IT관련

오라클 병렬처리(Parallel Processing)관련 주의 사항 (degree)

Oracle DB에서 user_tables, user_indexes 딕셔너리를 조회해보면 degree, instances 라는 컬럼이 있습니다.

이 컬럼들은 병렬처리를 자동으로 해주는 용도로 사용되는 컬럼입니다.

degree 컬럼값이 8인 테이블이 있으면 이 테이블을 Full Scan 하는 경우 자동으로 Parallel 8 로 처리한 효과를 줍니다.

instances 는 RAC 의 경우에 여러 노드에서 병렬처리를 할 수 있도록 해주는 역할을 하는 것이구요.

 

DW 시스템 같은 곳에서는 유용할 수도 있으나, OLTP 환경에서는 주의해야 하는 부분이죠~

OLTP 에서 시도 때도 없이 병렬처리를 지맘대로 했다가는 장애 나기 십상입니다.

 

그래서 table 이나 index 에 degree, instances 값이 1 이 아닌 경우에는 정말 의도적으로 누가 설정한 것인지 확인해볼 필요가 있습니다.

가끔은 의도하지 않게 이게 세팅되는 경우가 있습니다.

 

 

EMPLOYEE 테이블을 읽어서 TEST1 테이블을 만드는 CTAS 구문입니다.

이 작업을 좀 빠르게 하기 위해서 parallel 10 옵션을 주었습니다.

그러면, 테이블 생성 작업시 병렬프로세서 10개를 띄워서 병렬로 작업하기 때문에 빠릅니다.

 

하지만, 이런 식으로 작업을 하게되면 이 TEST1 테이블의 degree 속성이 10 으로 생성됩니다.

 

 

전혀 예상하지 못한 황당한 상황입니다. 나는 테이블 생성할때만 parallel 로 작업하고 싶었던 건데...

 

이런 경우는 alter table 커맨드로 바꿔주면 됩니다.

 

 

 

인덱스의 경우에도 마찬가지 현상이 발생합니다.

 

 

인덱스 생성 작업을 빠르게 하려고 parallel 옵션을 주어 작업한 경우에도 degree 값이 세팅되기 때문에 이것도 수정해줘야 합니다.

 

 

 

참고 ▶ 오라클 병렬처리 종합페이지