소트 머지 조인

이재철·2021년 10월 9일
0

SQL

목록 보기
9/11

조인 컬럼에 인덱스가 없을 때, 대량의 데이터 조인이어서 인덱스가 효과적이지 않을 때, 옵티마이저는 NL조인 대신 소트 머지 조인이나 해시 조인을 선택한다.

SGA vs PGA

  • SGA

    • 공유 메모리 영역인 SGA에 캐시된 데이터는 여러 프로세스가 공유할 수 있다.
    • 여러 프로세스가 공유할 수 있지만, 동시에 액세스할 수 없다.
    • 동시에 액세스하려는 프로세스 간 액세스를 직렬화하기 위한 Lock 메커니즘으로 래치(Latch)가 존재
    • 데이터 블록과 인덱스 블록을 캐싱하는 DB버퍼캐시는 SGA의 가장 핵심적인 구성요소
    • 여기서 블록을 읽으려면 버퍼 Lock도 얻어야 한다.
  • PGA

    • 오라클 서버 프로세스는 SGA에 공유된 데이터를 읽고 쓰면서, 동시에 자신만의 고유 메모리 영역을 갖는다.
    • 각 오라클 서버 프로세스에 할당된 메모리 영역을 PGA라 부름
    • 프로세스에 종속적인 고유 데이터를 저장하는 용도로 사용
    • 다른 프로세스와 공유하지 않는 독립적인 메모리 공간
    • 래치 메커니즘이 불필요
    • 같은 양의 데이터를 읽더라도 SGA 버퍼캐시에서 읽을 때보다 훨씬 빠름

기본 매커니즘

  • 소트 머지 조인
    1. 소트 단계 : 양쪽 집합을 조인 컬럼 기준으로 정렬
    2. 머지 단계 : 정렬한 양쪽 집합을 서로 머지
  • SortArea에 저장할 데이터 자체가 인덱스 역할을 하므로 소트 머지 조인은 조인 컬럼에 인덱스가 없어도 사용할 수 있는 조인 방식이다.

소트 머지 조인이 빠른 이유

  • NL 조인의 치명적인 단점은 대량 데이터 조인할 때 성능이 매우 느림
  • 소트 머지 조인은 Sort Area에 미리 정렬해 둔 자료구조를 이용한다는 점만 다를 ㅃ분 조인 프로세싱 자체는 NL 조인과 같다.
  • 소트 머지 조인은 양쪽 테이블로 부터 조인 대상 집합을 일괄적으로 읽어 PGA에 저장한 후 조인한다.
  • PGA는 프로세스만을 위한 독립적인 메모리 공간이므로 데이터를 읽을 때 래치 획득 과정이 없다.

소트 머지 조인의 주용도

  • 소트 머지 조인 사용
    1. 조인 조건식이 등치(=)조건이 아닌 대량 데이터 조인
    2. 조인 조건식이 아예 없는 조인(Cross Join, 카테시안 곱)

소트 머지 조인 제어하기

  • use_merge()

소트 머지 조인 특징 요약

  • 조인을 위해 실시간으로 인덱스를 생성하는 것과 다름 없다.
  • 조인 컬럼에 인덱스가 없는 상황에서 두 테이블을 각각 읽어 조인 대상 집합을 줄일 수 있을 떄 유리
  • 스캔 위주의 액세스 방식을 사용한다.
  • 하지만 모든 처리가 스캔 방식으로 이루어 지지 않음

0개의 댓글