::sqlp:: 친절한 SQL 튜닝 1

MinJeongKim·2024년 7월 23일
0
post-thumbnail

자주 사용하는 힌트 목록 😂

분류힌트설명
최적화 목표ALL_ROWS
FIRST_ROWS(N)
전체 처리속도 최적화
최초 N건 응답속도 최적화
액세스 방식FULL
INDEX
INDEX_DESC
INDEX_FFS
INDEX_SS
Table Full Scan으로 유도
Index Scan으로 유도
Index를 역순으로 스캔하도록 유도
Index Fast Full Scan으로 유도
Index Skip Scan으로 유도
조인순서ORDERED
LEADING

SWAP_JOIN_INPUTS

FROM 절에 나열된 순서대로 조인
LEADING 힌트 괄호에 기술한 순서대로 조인
예) LEADING(T1 T2)
해시 조인 시, BUILD INPUT을 명시적으로 선택
예) SWAP_JOIN_INPUTS(T1)
조인방식USE_NL
USE_MERGE
USE_HASH
NL_SJ
MERGE_SJ
HASH_SJ
NL 조인으로 유도
소트 머지 조인으로 유도
해시 조인으로 유도
NL 세미조인으로 유도
소트 머지 세미조인으로 유도
해시 세미조인으로 유도
서브쿼리
팩토링
MATERIALIZE

INLINE


WITH 문으로 정의한 집합을 물리적으로 생성하도록 유도
예) WITH /+ MATERIALIZE / T AS ( SELECT ...)
WITH 문으로 정의한 집합을 물리적으로 생성하지 않고
INLINE 처리하도록 유도
예) WITH /+ INLINE / ( SELECT ...)
쿼리 변환MERGE
NO_MERGE
UNNEST
NO_UNNEST
PUSH_PRED
NO_PUSH_PRED
USE_CONCAT
NO_EXPAND
뷰 머징 유도
뷰머징 방지
서브쿼리 Unnesting 유도
서브쿼리 Unnesting 방지
조인조건 Pushdown 유도
조인조건 Pushdown 방지
OR 또는 IN-List 조건을 OR-Expansion으로 유도
OR 또는 IN-List 조건에 대한 OR-Expansion 방지
병렬 처리PARALLEL

PARALLEL_INDEX
PQ_DISTRIBUTE
테이블 스캔 또는 DML을 병렬방식으로 처리하도록 유도
예)PARALLEL(T1 2) PARALLEL(T2 2)
인덱스 스캔을 병렬방식으로 처리하도록 유도
병렬 수행 시 데이터 분배 방식 결정
예) PQ_DISTRIBUTE(T1 HASH HASH)
기타APPEND
DRIVING_SITE
PUSH_SUBQ
NO_PUSH_SUBQ
Direct-Path Insert 로 유도
DB Link Remote 쿼리에 대한 최적화 및 실행 주체 지정(Local 또는 Remote)
서브쿼리를 가급적 빨리 필터링하도록 유도
서브쿼리를 가급적 늦게 필터링하도록 유도

데이터베이스 저장구조


버퍼캐시 히트율

  • 버퍼캐시 효율을 측정하는 데 전통적으로 가장 많이 사용해 온 지표
  • 물리적 I/O는 BCHR에 의해 결정되는데 이는 시스템 상황에 따라 달라지므로 결국 SQL 성능을 높이기 위해서는 일정한 논리적 I/O를 줄여야 한다.
  • SQL을 튜닝해서 읽는 총 블록 개수를 줄이면 논리적 I/O를 줄일 수 있음 > 논리적 입출력을 줄임으로써 물리적 입출력을 줄이는 것이 곧 SQL 튜닝
BCHR = (캐시에서 곧바로 찾은 블록 수 / 총 읽은 블록 수) * 100
	 = ((논리적 I/O - 물리적 I/O) / 논리적 I/O) * 100
     = (1 - (물리적 I/O) / (논리적 I/O)) * 100

참고

조시형, 「친절한 SQL 튜닝」, 2018, p 27, 28, 39

profile
웹 개발자 & DA

0개의 댓글

관련 채용 정보