Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

최적화된 비트맵 필터링(Optimized Bitmap Filtering)의 구현 방식

비트맵 필터는 선택도(selectivity)가 높을 때만 유용합니다. 쿼리 옵티마이저는 최적화된 비트맵 필터가 충분히 선택적인지, 그리고 어떤 연산자에 필터를 적용할지 판단합니다. 옵티마이저는 스타 조인(star join)의 모든 분기에 대해 최적화된 비트맵 필터를 검토하고, 비용 기반 규칙(costing rules)을 사용하여 해당 실행 계획이 가장 낮은 예상 실행 비용을 제공하는지 여부를 결정합니다.

최적화된 비트맵 필터가 선택적이지 않으면 비용 추정치가 일반적으로 지나치게 높아져 해당 계획은 거부됩니다. 실행 계획에서 최적화된 비트맵 필터를 배치할 위치를 고려할 때, 옵티마이저는 해시 조인 변형 중에서 오른쪽 깊이(right-deep) 방식으로 구성된 해시 조인 스택을 검토 대상으로 삼습니다. 차원 테이블과의 조인은 가능한 한 가장 선택적인 조인부터 먼저 실행되도록 배치됩니다.

최적화된 비트맵 필터가 적용되는 연산자에는 다음과 같은 형태의 비트맵 술어(bitmap predicate)가 표시됩니다.

PROBE([Opt_Bitmap1001], {[column_name]} [, 'IN ROW'])

이 비트맵 술어는 아래와 같은 정보를 보여줍니다.

  • 비트맵 이름: Bitmap 연산자에 지정된 이름과 연결된 이름입니다. 'Opt_' 접두사는 최적화된 비트맵 필터가 사용되었음을 나타냅니다.
  • 프로브(probe)되는 열: 필터링된 데이터가 실행 계획 트리를 따라 흐르는 기준이 되는 열입니다.
  • 행 내(in-row) 최적화 필요 여부: 비트맵 프로브가 행 내 최적화를 필요로 하는 경우 IN ROW 매개변수와 함께 호출되며, 그렇지 않으면 해당 매개변수는 생략됩니다.

최적화된 비트맵 필터링의 적용 요구 사항

최적화된 비트맵 필터링이 적용되려면 다음 조건을 충족해야 합니다.

  • 팩트 테이블(fact table)은 최소 100페이지 이상이어야 합니다. 그보다 작은 테이블은 옵티마이저가 차원 테이블(dimension table)로 간주합니다.
  • 팩트 테이블과 차원 테이블 간에는 내부 조인(inner join)만 고려됩니다.
  • 팩트 테이블과 차원 테이블 간의 조인 술어는 단일 열(single column) 조인이어야 하며, 반드시 기본 키-외래 키 관계일 필요는 없습니다. 정수 기반 열이 선호됩니다.
  • 차원 입력의 카디널리티(cardinality)가 팩트 테이블의 입력 카디널리티보다 작은 경우에만 차원과의 조인이 고려됩니다.

비트맵 필터링과 최적화된 비트맵 필터링은 쿼리 실행 계획에서 비트맵 표시 계획 연산자(Bitmap Showplan operator)를 통해 수행됩니다. 비트맵 필터링은 해시 조인 또는 병합 조인(merge join)이 사용되는 병렬 쿼리 계획에서만 적용되며, 최적화된 비트맵 필터링은 해시 조인이 사용되는 병렬 쿼리 계획에만 적용됩니다.

두 방식 모두 비트맵 필터는 해시 조인의 빌드 입력(build input), 즉 차원 테이블 쪽에서 생성됩니다. 그러나 실제 필터링은 일반적으로 해시 조인의 프로브 입력(probe input), 즉 팩트 테이블 쪽에 위치한 병렬 처리(Parallelism) 연산자 내에서 수행됩니다. 만약 조인이 정수 열을 기반으로 한다면, 필터를 병렬 처리 연산자 대신 원본 테이블 또는 인덱스 스캔 연산에 직접 적용할 수 있습니다. 이러한 기법을 행 내 최적화(in-row optimization)라고 합니다.