티스토리 뷰
각각 몇백만건의 데이터를 가진 테이블들 가지고 통계를 뽑아야하는 상황이 생겼다.
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 |
'(구)개발' 카테고리의 다른 글
jQeury) 무한 스크롤 Div 바닥 감지 이벤트 발생시키기 (0) | 2019.07.05 |
---|---|
오라클 제수가 0입니다 ORA-01476 나누기 (0) | 2019.03.11 |
ORACLE GROUPING_ID, ROLLUP을.ARABOJA(예제) (0) | 2019.02.19 |
JAVA) VO의 key value print찍기를.araboja (0) | 2018.08.23 |
ORACLE 10g에서 JOIN UPDATE를.araboja (0) | 2018.06.08 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- docker
- 유플레이
- 디비전2
- Spring
- ec2
- 이클립스
- nba2k19
- 벤치멤버
- 패드
- 점심
- jenkins
- springboot
- 자바
- 스팀
- java
- AWS
- 킹스의킹
- 엑스박스
- 쿼리
- android
- NBA
- 새크라멘토킹스
- 오라클
- Oracle
- 스프링
- 디비전
- 프로그래머스
- 수원
- 게임
- 토이프로젝트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함