Adaptives Filtern in AlloyDB AI

Auf dieser Seite finden Sie einen konzeptionellen Überblick über die adaptive Filterung in AlloyDB AI, einer Funktion zur Optimierung gefilterter Vektorsuchen.

Was ist die adaptive Filterung?

Beim adaptiven Filtern werden Abfragemuster und Datenverteilungen während der Abfrageausführung analysiert, um dynamisch die effizienteste Filterstrategie auszuwählen, z. B. Inline- oder Vorabfilterung.

Das AlloyDB AI-Abfrageoptimierungstool verwendet die kostenbasierte Analyse, um zu ermitteln, ob Inline-Filterung oder Vorfilterung zu einem bestimmten Zeitpunkt während der Abfrageausführung die beste Leistung bietet.

Diese Art der Optimierung unterstützt die gefilterten Vektorsuchen von AlloyDB AI, bei denen das adaptive Filtern automatisch zwischen der Verwendung von Vektor- und Metadatenindex wechselt. So werden effiziente und genaue Ergebnisse ohne manuellen Eingriff erzielt.

Dynamisches Wechseln zwischen Filterstrategien

Beim adaptiven Filtern wird während der Ausführung von Abfragen automatisch und dynamisch zwischen Inline-Filterung und Vorfilterung gewechselt. Die Entscheidung basiert auf Echtzeit-Abfragemustern und Datenverteilungen. Das AlloyDB AI-Abfrageoptimierungstool verwendet eine kostenbasierte Analyse, um zu ermitteln, welche Strategie zu einem bestimmten Zeitpunkt die beste Leistung bietet.

Von Inline- zu Vorfilterung

Wenn der Optimierer feststellt, dass die Vorabfilterung effizienter ist, wird durch die adaptive Filterung während der Ausführung von der Inline-Filterung zur Vorabfilterung gewechselt. Der Abfrageplan wird dynamisch angepasst.

Im Plan kann beispielsweise Bitmap assisted pre-filtering im Feld Ausführungsstrategie angezeigt werden, wenn das Optimierungsprogramm feststellt, dass Vorabfilterung an dieser Stelle in der Abfrage effizienter ist. Diese dynamische Änderung erfolgt, wenn das System sich an die tatsächlichen Daten anpasst, die während der Ausführung der Abfrage auftreten.

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)

Wenn Sie Execution Strategy: Bitmap assisted pre-filtering verwenden, wird ein großes Dataset zuerst durch ein separates Bitmap Index Scan gefiltert. Wenn durch diese Vorfilterung die Kandidaten effektiv eingegrenzt werden, wird der Vektorindex nicht für die endgültige Suche nach Vektorähnlichkeit verwendet.

Vom Vorfiltern zum Inline-Filtern

Beim adaptiven Filtern kann auch dynamisch von der Vorabfilterung zur Inline-Filterung gewechselt werden, wenn der AlloyDB AI-Abfrageoptimierer feststellt, dass die Inline-Filterung für die aktuellen Abfrageeigenschaften effizienter ist.

In solchen Fällen wird der Anfrageplan dynamisch angepasst, um eine direktere Verarbeitung der Vektordaten ohne expliziten Vorfilterungsschritt vor dem Vektorscan zu ermöglichen. Diese Anpassungsfähigkeit trägt dazu bei, dass eine optimale Leistung erzielt wird, wenn sich Datenverteilungen oder Abfrageparameter während der Laufzeit ändern.

Im Feld Execution Strategy (Ausführungsstrategie) wird beispielsweise vector scan angezeigt, wenn das Optimierungsprogramm feststellt, dass eine Inline-Filterstrategie für die jeweilige Abfrage effizienter ist.

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)

In diesem Beispiel wird Execution Strategy als Bitmap assisted vector Scan on scann_idx dargestellt, mit einem zugrunde liegenden Bitmap Index Scan auf btree_idx. Dies weist darauf hin, dass die Vektorsuche einen Bitmap-Filter verwendet, der vom Bitmap-Indexscan basierend auf der Bedingung int_col <= 100000000 generiert wird. Die Custom Scan (vector scan) verarbeitet dann nur die durch diese Bitmap identifizierten Zeilen und integriert die Filterung direkt in den Vektorscanprozess.

Nächste Schritte