AlloyDB AI의 적응형 필터링 이해하기

이 페이지에서는 필터링된 벡터 검색을 최적화하도록 설계된 기능인 AlloyDB AI의 적응형 필터링에 대한 개념적 개요를 제공합니다.

적응형 필터링이란 무엇인가요?

적응형 필터링은 쿼리 실행 중에 쿼리 패턴과 데이터 분포를 분석하여 인라인 또는 사전 필터링과 같은 가장 효율적인 필터링 전략을 동적으로 선택합니다.

AlloyDB AI 쿼리 옵티마이저는 비용 기반 분석을 사용하여 쿼리 실행 중 특정 시점에서 인라인 필터링 또는 사전 필터링 중 어떤 방식이 더 나은 성능을 제공하는지 결정합니다.

이 유형의 최적화는 AlloyDB AI의 필터링된 벡터 검색을 지원합니다. 여기서 적응형 필터링은 벡터와 메타데이터 색인 사용 간에 자동으로 전환되어 수동 개입 없이 효율적이고 정확한 결과를 생성합니다.

필터링 전략 간 동적 전환

적응형 필터링은 쿼리 실행 중에 실시간 쿼리 패턴과 데이터 분포에 따라 인라인 필터링과 사전 필터링 전략 간에 자동으로 동적으로 전환됩니다. AlloyDB AI 쿼리 옵티마이저는 비용 기반 분석을 사용하여 특정 시점에서 어떤 전략이 가장 우수한 성능을 제공하는지 결정합니다.

인라인에서 사전 필터링으로

옵티마이저가 사전 필터링이 더 효율적이라고 판단하면 적응형 필터링으로 인해 실행 중에 인라인 필터링에서 사전 필터링으로 전환됩니다. 쿼리 계획이 이를 반영하도록 동적으로 변경됩니다.

예를 들어 옵티마이저가 쿼리의 해당 시점에서 사전 필터링이 더 효율적이라고 판단하면 계획의 실행 전략 필드에 Bitmap assisted pre-filtering이 표시될 수 있습니다. 이 동적 변경은 시스템이 쿼리 실행 중에 발견되는 실제 데이터에 적응하면서 발생합니다.

Limit (actual rows=10 loops=1)
  ->  Custom Scan (vector scan) on t1 (actual rows=10 loops=1)
        Execution Strategy: Bitmap assisted pre-filtering
        Order By: (vec_col <=> '[...]'::vector)
        Limit: 10
        ->  Bitmap Index Scan on btree_idx (actual rows=10000 loops=1)
              Index Cond: (int_col <= 100000000)

Execution Strategy: Bitmap assisted pre-filtering를 사용하는 경우 별도의 Bitmap Index Scan가 먼저 대규모 데이터 세트를 필터링합니다. 이 사전 필터링으로 후보를 효과적으로 좁히면 최종 벡터 유사성 검색에 벡터 색인이 사용되지 않습니다.

사전 필터링부터 인라인 필터링까지

AlloyDB AI 쿼리 옵티마이저가 현재 쿼리 특성에 인라인 필터링이 더 효율적이라고 판단하는 경우 적응형 필터링은 사전 필터링에서 인라인 필터링으로 동적으로 전환할 수도 있습니다.

이러한 경우 쿼리 계획은 벡터 스캔 앞에 명시적인 사전 필터링 단계 없이 벡터 데이터를 더 직접적으로 처리하도록 동적으로 조정됩니다. 이 적응성은 런타임 중에 데이터 분포나 쿼리 매개변수가 변경될 때 최적의 성능을 달성하는 데 도움이 됩니다.

예를 들어 옵티마이저가 지정된 쿼리에 인라인 필터링 전략이 더 효율적이라고 판단하면 쿼리 계획의 실행 전략 필드에 vector scan이 표시됩니다.

Limit (actual rows=10 loops=1)
  ->  Custom Scan (vector scan) on t1 (actual rows=10 loops=1)
        Execution Strategy: Bitmap assisted vector Scan on scann_idx
        Order By: (vec_col <=> '[...]'::vector)
        Limit: 10
        Num Requalifications: 0
        Num filtered: 1000
        ->  Bitmap Index Scan on btree_idx (actual rows=10000 loops=1)
              Index Cond: (int_col <= 100000000)

이 예시에서 Execution Strategybtree_idx에 있는 기본 Bitmap Index Scan와 함께 Bitmap assisted vector Scan on scann_idx를 표시합니다. 이는 벡터 검색이 비트맵 필터를 사용함을 나타냅니다. 비트맵 필터는 비트맵 색인 스캔이 int_col <= 100000000 조건을 기반으로 생성합니다. 그런 다음 Custom Scan (vector scan)는 이 비트맵으로 식별된 행만 처리하여 필터링을 벡터 스캔 프로세스에 직접 통합합니다.

다음 단계