티스토리 뷰


각각 몇백만건의 데이터를 가진 테이블들 가지고 통계를 뽑아야하는 상황이 생겼다.


A-a컬럼과 B-PK를 조인하여 컬럼 몇개 꺼내고

A-b컬럼과 B-PK를 조인하여 또 다른 컬럼 몇개 꺼내고

A와 C와 D를 조인하여 합계를 내놓는 컬럼 몇개 꺼내고


그리고 특정 데이터 집계를 위해 이용된 위 4개 테이블 외에 공통적으로 사용되는 내용 등을 가져오기 위해 

A-PK와 E-PK를 조인하여 또 이것저것 꺼내오고..

(그럼 테이블 5개로 봐야하나)


말로는 쉬운데 실제로 짜보니 도저히 원하는 속도가 나오질 않았다.


처음에 완성 된 쿼리 - 20

1차 튜닝 - 17~19초

2차 튜닝 - 14~17초

3차 튜닝 - 11~13초


처음에 비해 많이 줄였지만 여전히 사용자들이 쓰기에는 말도 안되는 속도였다


그래서 오라클 힌트를 사용해보기 위해 찾아보던 중 병렬처리를 도와주는 힌트를 알아냈다.


힌트명은 제목에 써있듯 PARALLEL이다.


사용법은 SELECT 바로 뒤에 

/*+ PARALLEL(TABLE_NAME DEGREE수) */

라고 작성.


TABLE_NAME = 말 그대로.

DEGREE = 병렬도를 말한다. CPU코어보다 적은 수여야 한다.(궁금해서 128로 놓고 돌려봤는데 쿼리자체는 돌긴 돌지만 딱히 효과는 없다)


-결과-

수행 시간 11~13초 걸리던 쿼리를 병렬처리 힌트를 이용하여 2.5초~3초로 수행 시간 단축.



※ 아래는 사용법 참고용.

1
2
3
4
5
6
7
SELECT * FROM
    (SELECT ROWNUM AS "ROWNUMBER", AA.* FROM
        (SELECT /*+ PARALLEL(T2 4) */
            T1.IDX, T2.NAME, T2.SAL
        FROM COMPANY T1, DEPT T2)
    )AA
WHERE "ROWNUMBER" >= 0 AND "ROWNUMBER" <= 10
cs


최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함