Auf dieser Seite erhalten Sie einen Überblick über die spaltenbasierte Engine, die AlloyDB for PostgreSQL bietet, und erfahren, wie Sie sie verwenden.
Die spaltenbasierte Engine von AlloyDB beschleunigt die Verarbeitung von Scans, Joins und Aggregaten in SQL-Abfrage durch die folgenden Komponenten:
Ein Spaltenspeicher, der Tabellendaten und Daten in der materialisierten Ansicht für ausgewählte Spalten enthält, die in einem spaltenorientierten Format neu organisiert wurden. Sie können dem Spaltenspeicher auch häufig verwendete Ausdrücke hinzufügen.
Ein spaltenorientierter Abfrageplaner und eine spaltenorientierte Ausführungs-Engine, die die Verwendung des Spaltenspeichers in Abfragen unterstützen.
Die spaltenbasierte Engine kann auf der primären Instanz, einer Lesepoolinstanz oder beiden verwendet werden. Wenn die spaltenbasierte Engine auf einer Lesepoolinstanz aktiviert ist, können Sie optional die transparente Abfrageweiterleitung aktivieren, um schreibgeschützten Traffic automatisch an sie weiterzuleiten.
Sie können auch die automatische Spaltenformatierung verwenden, um Ihre Arbeitslast zu analysieren und den Spaltenspeicher automatisch mit den Spalten zu füllen, die die beste Leistungssteigerung bieten.
Wenn Sie die spaltenbasierte Engine für eine bestimmte Abfrage verwenden möchten, müssen alle Spalten in den Abfragefragmenten, z. B. Joins und Scans, im Spaltenspeicher vorhanden sein.
Standardmäßig ist die spaltenbasierte Engine so konfiguriert, dass 30% des Arbeitsspeichers Ihrer Instanz verwendet werden. Je nach Arbeitslast, Arbeitsspeichernutzung und Konfiguration eines Lesepools können Sie die Arbeitsspeicherzuweisung für die spaltenbasierte Engine auf Ihrer primären Instanz reduzieren und der Lesepoolinstanz mehr Arbeitsspeicher zuweisen. Informationen zum Ansehen und Überwachen der Arbeitsspeichernutzung durch die spaltenbasierte Engine finden Sie unter Arbeitsspeichernutzung des Spaltenspeichers ansehen. Informationen zum Ändern der vom Spaltenspeicher verwendeten Speichergröße finden Sie unter Größe des Spaltenspeichers konfigurieren. Die empfohlene Arbeitsspeichergröße für die spaltenbasierte Engine für Ihre Instanz finden Sie unter Empfohlene Arbeitsspeichergröße für den Spaltenspeicher.
Abfragetypen, die von der spaltenbasierten Engine profitieren
Bestimmte Abfragen können von der spaltenbasierten Engine profitieren. Im Folgenden finden Sie eine Liste der Vorgänge und ihrer Abfragemuster, die am meisten von der spaltenbasierten Engine profitieren:
Table Scans
- Sie haben selektive Filter wie
WHERE-Klauseln. - Sie verwenden eine kleine Anzahl von Spalten aus einer größeren Tabelle oder materialisierten Ansicht.
- Sie verwenden Ausdrücke wie
LIKE,ILIKE,SUBSTR, undTRIM.
- Sie haben selektive Filter wie
Aggregatfunktionen
- Sie verwenden nur die folgenden Ausdrücke:
SUM,MIN,MAX,AVGundCOUNT. - Sie befinden sich am Anfang der Abfrage eines spaltenweisen Scans.
- Sie sind nicht gruppiert oder nach Spalten gruppiert.
- Sie verwenden nur die folgenden Ausdrücke:
ORDER-BYundSORT: nur wennORDER-BYoderSORTauf die Scanergebnisse von Spalten angewendet wird, auf die über die spaltenbasierte Engine zugegriffen wird.LIMIT: nur wenn sich der Operator am Anfang der Abfrage eines spaltenweisen Scans und vor allenSORT- oderGROUP BY-Operatoren befindet.INNER HASH JOINnur wenn die verwendeten Schlüssel Spalten sind und keine Join Qualifizierer verwendet werden.Selektive Joins nur wenn sich die Joins am Anfang der Abfrage eines spaltenweisen Scans befinden.
Filterabfragen mit JSON-Ausdrücken.
Weitere Informationen dazu, welche Abfragen am besten mit der spaltenbasierten Engine funktionieren, ob
und wie die spaltenbasierte Engine von einer Abfrage verwendet wurde, finden Sie unter
Verwendung der spaltenbasierten Engine mit EXPLAINüberprüfen.
Spaltenbasierte Engine verwenden
So verwenden Sie die spaltenbasierte Engine in einer AlloyDB-Instanz:
Aktivieren Sie die Engine auf der Instanz.
Das Aktivieren der Engine ist ein einmaliger Vorgang, für den ein Neustart erforderlich ist.
Fügen Sie dem Spaltenspeicher Spalten hinzu.
Verwenden Sie eine der folgenden Methoden, um dem Spaltenspeicher Spalten hinzuzufügen:
Automatische Spaltenformatierung verwenden, dabei wird Ihre Arbeitslast analysiert und automatisch Spalten hinzugefügt.
Spalten manuell hinzufügen oder häufig verwendete Ausdrücke dem Spaltenspeicher hinzufügen (Vorschau): Sie können die Spalten basierend auf Ihrem Wissen über die Arbeitslast der Datenbanken in der Instanz hinzufügen.
Mit der
g_columnar_relationsAnsicht können Sie nachvollziehen, was im Spaltenspeicher enthalten ist. Nachdem Spalten hinzugefügt wurden, können Sie mit derEXPLAINAnweisung die Verwendung der spaltenbasierten Engine in SQL-Abfragen prüfen.
Eine detaillierte Anleitung zur Verwendung der spaltenbasierten Engine finden Sie unter Spaltenbasierte Engine konfigurieren.
Welche Daten können dem Spaltenspeicher hinzugefügt werden?
Es gibt einige Einschränkungen hinsichtlich der Datentypen und Datenquellen, die Sie verwenden können, wenn Sie dem Spaltenspeicher Spalten hinzufügen.
Unterstützte Datentypen
Die spaltenbasierte Engine kann unterstützte Spalten in einer Tabelle auffüllen und aktualisieren, auch wenn einige Spalten nicht unterstützte Datentypen haben. Spalten mit nicht unterstützten Datentypen werden während des Auffüllvorgangs übersprungen.
Bei der Ausführung einer Abfrage verarbeitet die spaltenbasierte Engine eine Tabelle, wenn alle in diesem Teil der Abfrage referenzierten Spalten unterstützte Datentypen haben und in der spaltenbasierten Engine vorhanden sind.
In Abfragen mit mehreren Tabellen, z. B. JOIN-Vorgängen, können Sie die spaltenbasierte Engine für jede Tabelle einzeln verwenden. Solange alle Spalten, auf die in der Abfrage aus der jeweiligen Tabelle zugegriffen wird, unterstützte Datentypen haben und in der spaltenbasierten Engine vorhanden sind, kann diese Tabelle von der spaltenbasierten Engine verarbeitet werden, auch wenn andere Tabellen im Join nicht unterstützte Spalten haben.
Die spaltenbasierte Engine unterstützt nur Spalten mit den folgenden integrierten Datentypen:
arraybigintbooleanbyteachardatedecimaldouble precisionenumfloat4float8integerjsonjsonbnumericrealserialshortsmallinttexttimestamptimestamptzuuidvarcharvector
Die spaltenbasierte Engine ignoriert alle Versuche, dem Spaltenspeicher manuell Spalten mit nicht unterstützten Datentypen hinzuzufügen.
Nicht unterstützte Datenquellen
Die spaltenbasierte Engine unterstützt keine Tabellen oder materialisierten Ansichten mit den folgenden Attributen als Datenquellen:
Nicht-Blatt-partitionierte Tabellen
Fremde Tabellen
Einschränkungen der spaltenbasierten Engine
- Wenn Sie eine Analyseabfrage für eine Spalte mit einem Index ausführen, kann der AlloyDB-Optimierer den Zeilenspeicher verwenden.
- Spalten, die dem Spaltenspeicher manuell hinzugefügt wurden, werden nicht automatisch entfernt. Wenn Sie manuell hinzugefügte Spalten erzwingen möchten, verwenden Sie
google_columnar_engine_drop()in Ihrer Instanz. - Bei der automatischen Spaltenorientierung werden Spalten möglicherweise dynamisch hinzugefügt und entfernt, je nachdem, wie sie in Abfragen verwendet werden.
- Nicht alle Datentypen werden von der spaltenbasierten Engine unterstützt. Weitere Informationen finden Sie unter Unterstützte Datentypen.
Häufige Aktualisierungen von Zeilen machen Spaltendaten ungültig. Wenn Sie eine Tabelle oder eine materialisierte Ansicht im Spaltenspeicher validieren möchten, können Sie entweder die Aktualisierung häufigkeit verringern oder die Aktualisierungen der spaltenbasierten Engine häufiger planen.
Sie können die Spalten
invalid_block_countundtotal_block_countin g_columnar_relations vergleichen, um zu prüfen, ob Ihre Tabelle oder Ansicht betroffen ist. Wenn Sie häufig oder in großem Umfang Änderungen an Ihrer Tabelle oder Ansicht vornehmen, ist der Wert voninvalid_block_counthoch.Eine partitionierte Tabelle kann nicht direkt in die spaltenbasierte Engine geladen werden. Wenn Sie die spaltenbasierte Engine verwenden möchten, müssen Sie jede Blattpartition der Tabelle einzeln laden.
Bei Tabellen oder Ansichten mit einer kleinen Anzahl von Zeilen, in der Regel weniger als 5.000,kann der Abfrageplaner den Zeilenspeicher anstelle des Spaltenspeichers verwenden, um eine bessere Leistung zu erzielen, auch wenn die Daten erfolgreich in die spaltenbasierte Engine geladen wurden.