DOP 란 Degree Of Parallelism 의 약어로, 병렬도라고 합니다. 병렬처리할 때 병렬프로세스를 몇개 띄울 것인지를 의미합니다. DOP 가 20 이면 20개의 병렬프로세스를 띄워서 작업한다는 의미입니다.
오라클에서 병렬처리는 DB서버의 자원(CPU, Memory, Disk I/O)을 최대한 사용해서 작업을 빠르게 끝낼 수 있는 아주 유용한 기능입니다.
하지만, 조심해야 할 부분이 하나의 작업에 대해서만 병렬처리를 하면 문제없지만, 동시에 수십개의 병렬처리가 돌아가는 상황이 발생한다면? ㅋㅋ 장애로 이어질 수 있겠죠...
이런 일이 종종 발생합니다.
개발자가 어플리케이션의 SQL에 /*+ parallel */ 힌트를 박아놨는데, 이 어플리케이션이 뜻하지 않게 너무 많이 실행되는 경우 ㅎㅎ 난리가 날겁니다.
또, DBA가 테이블을 옮기는 작업을 하면서 테이블을 parallel 옵션을 주어 생성해두었다가 이를 안고친 경우,
이 경우 이 테이블에 Access 하는 SQL에 대해 Parallel 처리를 하게되어, 영문도 모르게 병렬처리가 너무 많이 실행되는 사태가 발생하곤 합니다.
테이블의 경우 아래와 같이 user_tables 딕셔너리에서 degree 값을 조회하면 됩니다.
이 degree 값이 테이블의 DOP(병렬도, Degree Of Parallelism)를 나타냅니다.
지금은 1 로 세팅되어 있어 병렬처리를 하지 않습니다.
아래와 같이 alter table ~ parallel 커맨드로 테이블의 DOP를 변경할 수 있습니다.
DOP를 4 로 세팅했습니다. user_tables 딕셔너리의 degree 값이 4 로 바껴있는 것을 확인할 수 있습니다.
여기에서는 기존 테이블을 alter table 커맨드로 변경했지만, 일반적으로는 create table .. 커맨드로 처음에 테이블 생성작업할 때 parallel 옵션을 주었다가 이게 계속 남아있는 경우가 많습니다.
이걸 모르고 그대로 놔두면 종종 장애를 경험하는 불상사가 생깁니다. ㅋㅋ
위에서는 4 로 작은값이 세팅되어 있지만, 20, 32 등 큰 값으로 세팅되어 있는 경우도 종종 봤습니다.
그럼, 세션당 한번에 병렬프로세스가 20개, 32개 씩 뜬다는 얘기입니다.
여러 세션에서 동시에 실행한다면...? 몇백개씩 프로세스가 뜬다고 생각하면 ? 뜨악~
실제로 병렬처리가 일어나는지 Plan 을 체크해보겠습니다.
set autotrace on 커맨드를 실행해주면, 이후에 실행되는 모든 SQL문에 대해 실행 후, Plan 정보를 함께 보여줍니다.
Execution Plan 정보를 보면 PX COORDINATOR 가 나오는 걸로 보아 병렬처리를 했음을 알 수 있습니다.
밑에 Note 섹션에 DOP 4 로 실행되었다고 적혀져 나오네요.
원래 싱글일 때와 비교해보면 확실히 다른 것을 확인할 수 있습니다.
싱글처리할 때는 PX Coordinator 얘기도 없고, Note 섹션이 아예 안나오네요.
싱글처리로 바꾸는 Table 의 degree 를 초기화하는 방법은 위에서처럼 alter table ... parallel 1; 이라고 해도 되고,
alter table ... noparallel; 이라고 해도 같은 겁니다.
참고 ▶▶▶ Default DOP 보기
참고 ▶▶▶ 오라클 병렬처리 종합페이지
'IT관련' 카테고리의 다른 글
HTML font-family 모음 (폰트 패밀리) (0) | 2019.06.30 |
---|---|
오라클 Parallel 병렬처리 Default DOP (Default Degree of Parallelism) (0) | 2019.06.30 |
오라클 파티션테이블 기본개념 정리 (Oracle Partition Table Basics) (0) | 2019.06.29 |
오라클 복합파티션(Composite Partition) Hash + Range 샘플 (11g ~ ) (0) | 2019.06.29 |
오라클 복합파티션(Composite Partition) Hash + List 샘플 (11g ~ ) (0) | 2019.06.29 |