Häufige Probleme beheben, die bei der Verwendung der spaltenbasierten Engine von AlloyDB for PostgreSQL auftreten können.
Sie haben der spaltenbasierten Engine referenzierte Spalten hinzugefügt, aber Ihre SELECT-Abfrage verwendet sie nicht.
Beschreibung: Wenn Sie die spaltenbasierte Engine verwenden möchten, müssen alle Spalten, auf die in einem Abfragefragment verwiesen wird, z. B. Joins und Scans, im Spaltenspeicher vorhanden sein. Wenn eine referenzierte Spalte nicht in der spaltenbasierten Engine vorhanden ist, wird das Abfragefragment standardmäßig im Zeilenspeicher abgelegt.
Ein Abfragefragment in diesem Kontext ist eine Abfrage, die mehrere Scan-Knoten haben kann. Das Abfragefragment kann beispielsweise zwei Scan-Knoten für einen Join enthalten. Ein Scan-Knoten verwendet möglicherweise ein nicht spaltenbasiertes Format und ein anderer Scan-Knoten ein spaltenbasiertes Format. Alle Spalten eines Scan-Knotens – Filterspalten und Projektionsspalten – müssen spaltenweise ausgefüllt werden. Ebenso kann eine Abfrage einige Partitionen im spaltenbasierten und andere im nicht spaltenbasierten Format enthalten.
Empfohlene Lösung: So prüfen Sie, ob alle referenzierten Spalten in der spaltenorientierten Engine vorhanden sind:
Unterstützte Datentypen prüfen
Prüfen Sie, ob AlloyDB alle Datentypen der Spalten unterstützt, die Sie mit der spaltenbasierten Engine verwenden möchten. Weitere Informationen finden Sie unter Unterstützte Datentypen.
Unterstützte Operatoren prüfen
Prüfen Sie, ob AlloyDB die Operatoren für die Datentypen in der spaltenbasierten Engine unterstützt. Weitere Informationen zu unterstützten Operatoren finden Sie unter Abfragetypen, die von der spaltenbasierten Engine profitieren.
Führen Sie den Befehl
EXPLAIN COLUMNAR_ENGINEaus:Führen Sie den folgenden
EXPLAIN COLUMNAR_ENGINE-Befehl aus, um Probleme zu identifizieren und zu beheben, die verhindern, dass bestimmte Abfragen die spaltenorientierte Engine verwenden:EXPLAIN (COLUMNAR_ENGINE, ANALYZE) SELECT column1, column2 FROM my_table WHERE column3 > 100;
Sie können in der spaltenbasierten Engine keine Tabellen hinzufügen oder löschen.
Beschreibung: Sie möchten Tabellen in der spaltenbasierten Engine hinzufügen oder löschen.
Empfohlene Lösung: Überprüfen Sie Ihre Nutzerberechtigungen. Sie können Tabellen in der spaltenorientierten Engine nur hinzufügen oder löschen, wenn Sie Leseberechtigungen für die Tabelle haben.
Größe der spaltenbasierten Daten überschreitet den zugewiesenen Arbeitsspeicher
Beschreibung: Es treten Leistungs- oder Datenverarbeitungsprobleme auf, wenn die Größe Ihrer spaltenorientierten Daten den für die spaltenorientierte Engine zugewiesenen Arbeitsspeicher überschreitet.
Empfohlene Lösung: Verwenden Sie für eine optimale Leistung die Empfehlungsfunktion in AlloyDB, um die optimalen Tabellen und Spalten zum Befüllen der spaltenbasierten Engine zu ermitteln.
Wenn die empfohlenen Tabellen und Spalten den physischen Speicher der spaltenbasierten Engine überschreiten, wird für die überschüssigen spaltenbasierten Daten ein Teil der ultraschnellen Cache-Ebene verwendet. Bei Abfragen der verbleibenden Daten in der Tabelle, die sich nicht in der spaltenbasierten Engine befinden, wird der Zeilenspeicher transparent verwendet.
Sie können auch die Zuweisung von Arbeitsspeicher und Speicher-Cache für die spaltenorientierte Engine anpassen. Die spaltenbasierte Engine wird mit einer Standardgröße für den Arbeitsspeicher und den Speichercache bereitgestellt. Sie können den Arbeitsspeicher- und Speichercache manuell konfigurieren. Informationen zum Ändern der Menge an Arbeitsspeicher oder Speichercache, die der spaltenbasierten Engine zugewiesen ist, finden Sie unter Arbeitsspeicher für die spaltenbasierte Engine konfigurieren.
Abfragen von Apache Iceberg-Tabellen schlagen fehl oder verwenden die spaltenbasierte Engine nicht
Beschreibung: Abfragen für Apache Iceberg-Tabellen, die mit der Tabellenzugriffsmethode USING iceberg erstellt wurden, schlagen mit Fehlern fehl oder greifen auf direkte Scans zurück.
Empfohlene Lösung:
- Achten Sie darauf, dass das Flag
google_columnar_engine.enable_iceberg_readsauf der Instanz aufongesetzt ist und die Instanz neu gestartet wurde. Weitere Informationen finden Sie unter Datenbank-Flags konfigurieren. - Prüfen Sie, ob der AlloyDB-Cluster-Dienst-Agent die Rolle „Storage-Objekt-Betrachter“ (
roles/storage.objectViewer) für den Cloud Storage-Bucket hat, der Ihre Iceberg-Daten und -Metadaten enthält. Wenn Sie den Lakehouse-Laufzeitkatalog verwenden, muss er die Rolle „BigLake-Betrachter“ (roles/biglake.viewer) für das Projekt haben, in dem Ihr BigLake-Katalog gehostet wird. - Führen Sie
EXPLAIN (ANALYZE, COSTS OFF)aus, um die spaltenbasierte Ausführung zu prüfen, und bestätigen Sie, dass der Plan einenCustom Scan (ColumnarScan)-Knoten enthält. Eine ausführliche Anleitung zur Fehlerbehebung finden Sie unter Fehlerbehebung beim direkten Iceberg-Zugriff.