[Oracle] SQL 병렬 힌트를 부여하여 쿼리 수행시간 단축하기

2022. 2. 26. 15:10·Programming/Oracle
반응형

SQL 쿼리를 작성하다 보면 작은 데이터 간단한 데이터 탐색에서는 크게 무리가 되지 않지만, 많은 관계형 디비 안에서 여러개의 데이터 테이블을 조인하고 그룹화하다보면 시간이 매우 오래걸릴 때가 있다. 그 이유는 해당 쿼리를 수행하는데 순차적으로 진행되기 때문이다. 

이를 위해 오라클에서는 병렬 힌트를 부여해서 쿼리 수행 시 멀티로 데이터를 가져와 빠르게 응답을 받을 수 있다.

 

병렬 힌트의 장점은, 어플리케이션 쪽에서 소스를 수정하지 않아도 된다는 점이며, 주석 안에서 힌트를 주는 것이기 때문에 오타가 나도 쿼리가 수행되긴 한다. 

 

그럼, 병렬 쿼리를 사용하는 방법에 대해 알아보도록 하자.

 

1. 병렬 쿼리 사용 방법

먼저 병렬 처리가 가능할 수 있도록 세션에 권한을 부여한다. 

SQL> ALTER SESSION ENABLE PARALLEL DML;

Session altered.

 

그 다음 원하는 쿼리를 작성하고 parralell 힌트를 사용해서 활성화 한다.

SQL> SELECT /*+ PARALLEL(4) */  -- select 다음 병렬 힌트 작성
	COL1, COL2       -- 컬럼 작성
    FROM TABLE1;     -- 사용할 테이블 이름 작성

병렬 힌트를 작성할 때는 아래와 같이 3가지로 작성할 수 있다. 

  • /*+pararrel*/ : 자동으로 전체 쓰레드를 실행하여 병렬처리를 수행한다. 
  • /*+*pararrel(n)*/ : n개의 쓰레드를 실행하여 병렬처리를 수행한다. 되도록 사용할 쓰레드를 지정해주는 것이 좋다.
  • /*+*parallel(tablename, n)*/ : 테이블을 지정하여 n개의 쓰레드를 실행하여 병렬초리를 수행한다.

 

2. 병렬 실행이 되었는지 확인하는 방법

병렬 쿼리가 실행된 경우, V$PQ_SESSTAT에 정보가기록된다.

이 내용은 병렬 쿼리가 실행될 때마다 갱신되며, 세션을 로그아웃 하는 경우 데이터가 삭제된다. 

Allocation Height는 한개의 인스턴스 병렬도를 나타내며, 

Allocation Weight는 RAC 구성 할 때 병렬쿼리를 실행하는 인스턴스 수를 의미한다. 

 

따라서 병렬도는 Allocation height * Allocation Weight로 계산할 수 있다. 

코드는 아래와 같이 작성하면 알 수 있다.(출처 : https://mozi.tistory.com/178)

SQL> SELECT * FROM V$PQ_SESSTAT;

STATISTIC                      LAST_QUERY SESSION_TOTAL     CON_ID
------------------------------ ---------- ------------- ----------
Queries Parallelized                    1             2          0
DML Parallelized                        0             0          0
DDL Parallelized                        0             0          0
DFO Trees                               1             2          0
Server Threads                          4             0          0
Allocation Height                       4             0          0
Allocation Width                        1             0          0
Local Msgs Sent                        14            28          0
Distr Msgs Sent                         0             0          0
Local Msgs Recv'd                      14            28          0
Distr Msgs Recv'd                       0             0          0

STATISTIC                      LAST_QUERY SESSION_TOTAL     CON_ID
------------------------------ ---------- ------------- ----------
DOP                                     4             0          0
Slave Sets                              1             0          0

13 rows selected.

 

 

 

Reference:

https://mozi.tistory.com/178

 

[ORACLE] SQL 병렬 힌트를 부여하여 쿼리 성능 높이기

ORACLE 은 SQL 을 병렬 힌트를 부여하여 실행하는 기능을 제공합니다. 이 기능을 사용하면 어플리케이션 쪽에서 소스를 수정하지 않아도 되므로, 많은 이점이 있습니다. 병렬 힌트란, 데이터를 가

mozi.tistory.com

https://jack-of-all-trades.tistory.com/198

 

오라클 병렬처리(Parallel Processing) 개념 및 용어 정리, 종합페이지

Oracle DB 에서 SQL문을 만들면서 빠르게 실행하기 위해서 우리는 튜닝(Tuning)을 합니다. SQL튜닝을 하다하다 마지막으로 시도하는 것이 "병렬처리(Parallel Processing)" 입니다. 마지막으로 시도하는 이유

jack-of-all-trades.tistory.com

 

반응형

'Programming > Oracle' 카테고리의 다른 글

[Oracle] Oracle Exadata의 압축방식 (Exadata Hybrid columnar Compression, EHCC)  (0) 2022.05.21
[Oracle] Oracle Exadata란 무엇인가  (0) 2022.05.14
[Oracle] 오라클 append와 append_values 힌트, 사용방법  (0) 2022.04.23
[Oracle] 오라클 힌트(hint)의 개념, 사용법 알아보기  (0) 2022.03.27
[Oracle] 오라클 WITH절을 사용하여 임시테이블 만들기  (0) 2022.03.12
'Programming/Oracle' 카테고리의 다른 글
  • [Oracle] Oracle Exadata란 무엇인가
  • [Oracle] 오라클 append와 append_values 힌트, 사용방법
  • [Oracle] 오라클 힌트(hint)의 개념, 사용법 알아보기
  • [Oracle] 오라클 WITH절을 사용하여 임시테이블 만들기
자동화먹
자동화먹
많은 사람들에게 도움이 되는 생산적인 기록하기
    반응형
  • 자동화먹
    자동화먹의 생산적인 기록
    자동화먹
  • 전체
    오늘
    어제
    • 분류 전체보기 (144)
      • 생산성 & 자동화 툴 (30)
        • Notion (24)
        • Obsidian (0)
        • Make.com (1)
        • tips (5)
      • Programming (37)
        • Python (18)
        • Oracle (6)
        • Git (13)
      • AI Study (65)
        • DL_Basic (14)
        • ML_Basic (14)
        • NLP (21)
        • Marketing&Recommend (4)
        • chatGPT (0)
        • etc (12)
      • 주인장의 생각서랍 (10)
        • 생각정리 (4)
        • 독서기록 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    노션첫걸음
    Github
    Python
    빅데이터
    cnn
    gcp
    python기초
    데이터분석
    파이토치로 시작하는 딥러닝 기초
    빅데이터분석
    nlp
    자연어처리
    Transformer
    머신러닝
    데이터베이스
    Jupyter notebook
    LSTM
    GPT
    git
    dl
    딥러닝
    notion
    git commit
    pytorch
    seq2seq
    Google Cloud Platform
    ML
    노션
    기초
    파이토치
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
자동화먹
[Oracle] SQL 병렬 힌트를 부여하여 쿼리 수행시간 단축하기
상단으로

티스토리툴바