Adaptives Filtern in AlloyDB AI

Auf dieser Seite finden Sie einen konzeptionellen Überblick über das adaptive Filtern 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 Vorfilterung.

Der AlloyDB AI-Abfrageoptimierer verwendet eine kostenbasierte Analyse, um zu ermitteln, ob Inline-Filterung oder Vorabfilterung 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, um effiziente und genaue Ergebnisse ohne manuellen Eingriff zu erzielen.

Dynamisches Wechseln zwischen Filterstrategien

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

Von Inline- zu Vorfilterung

Wenn das Optimierungsprogramm feststellt, dass Vorabfilterung effizienter ist, wird durch adaptives Filtern während der Ausführung ein Wechsel von Inline-Filtern zu Vorfiltern ausgelöst. 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)

Bei Verwendung von Execution Strategy: Bitmap assisted pre-filtering 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.

Von der Vorfilterung zur Inline-Filterung

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

In solchen Fällen wird der Abfrageplan dynamisch angepasst, um eine direktere Verarbeitung der Vektordaten ohne expliziten Vorfilterschritt 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 Abfrageplan wird beispielsweise vector scan im Feld Ausführungsstrategie angezeigt, wenn das Optimierungsprogramm feststellt, dass eine Inline-Filterstrategie für die angegebene 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 mit einem zugrunde liegenden Bitmap Index Scan auf btree_idx angezeigt.Bitmap assisted vector Scan on scann_idx Das bedeutet, dass bei der Vektorsuche ein Bitmap-Filter verwendet wird, der vom Bitmap-Indexscan auf Grundlage der int_col <= 100000000-Bedingung 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