Eine konzeptionelle Übersicht über die spaltenbasierte Engine von AlloyDB finden Sie unter Übersicht über die spaltenbasierte Engine von AlloyDB Omni.
Spaltenbasierte Engine aktivieren
Wenn Sie die spaltenbasierte Engine für eine Instanz verwenden möchten, setzen Sie das Flag google_columnar_engine.enabled der Instanz auf on.
Die Schritte zum Festlegen dieses Flags für eine Instanz hängen davon ab, ob Sie AlloyDB Omni in einem Container oder in einem Kubernetes-Cluster ausführen.
Einzelserver
So setzen Sie google_columnar_engine.enabled auf on:
Führen Sie den PostgreSQL-Befehl
ALTER SYSTEMaus:ALTER SYSTEM SET google_columnar_engine.enabled = 'on'Wenn Sie die Konfiguration der spaltenbasierten Engine anpassen möchten, folgen Sie der Anleitung im nächsten Abschnitt, bevor Sie den Datenbankserver neu starten. Führen Sie andernfalls den folgenden Schritt aus, um den Datenbankserver jetzt neu zu starten.
Damit die Änderungen an den Konfigurationsparametern wirksam werden, starten Sie den Container mit AlloyDB Omni neu.
Docker
sudo docker restart CONTAINER_NAMEPodman
sudo podman restart CONTAINER_NAME
Kubernetes
Wenn Sie das Flag google_columnar_engine.enabled auf on setzen möchten, ändern Sie das Manifest Ihres Datenbankclusters, um das Attribut parameters dem Abschnitt primarySpec hinzuzufügen:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
name: CLUSTER_NAME
spec:
databaseVersion: "15.7.1"
primarySpec:
parameters:
google_columnar_engine.enabled: "on"
Ersetzen Sie CLUSTER_NAME durch den Namen Ihres Datenbankclusters. Das ist derselbe Datenbankclustername, den Sie beim Erstellen des Clusters angegeben haben.
Größe des Spaltenspeichers konfigurieren
Wenn die spaltenbasierte Engine für eine Instanz aktiviert ist, weist AlloyDB Omni einen Teil des Arbeitsspeichers der Instanz zu, um die spaltenbasierten Daten zu speichern. Wenn Sie Ihrem Spaltenspeicher schnellen RAM zuweisen, kann AlloyDB Omni so schnell wie möglich auf die Spaltendaten zugreifen.
Arbeitsspeicher und Speichercache stellen zusammen die Gesamtkapazität der spaltenbasierten Engine dar.
Arbeitsspeicher konfigurieren
Mit dem Flag google_columnar_engine.memory_size_in_mb können Sie die Zuweisung auf eine feste Größe festlegen.
Die Schritte zum Festlegen dieses Flags für eine Instanz hängen davon ab, ob Sie AlloyDB Omni in einem Container oder in einem Kubernetes-Cluster ausführen.
Einzelserver
So legen Sie das Flag google_columnar_engine.memory_size_in_mb für eine Instanz fest:
Konfigurieren Sie den Arbeitsspeicher, indem Sie den PostgreSQL-Befehl
ALTER SYSTEMausführen:ALTER SYSTEM SET google_columnar_engine.memory_size_in_mb = COLUMN_MEMORY_SIZE;Ersetzen Sie
COLUMN_MEMORY_SIZEdurch die neue Größe des Spaltenspeichers in Megabyte, z. B.256.Damit die Änderungen an den Konfigurationsparametern wirksam werden, starten Sie den Container mit AlloyDB Omni neu.
Docker
sudo docker restart CONTAINER_NAMEPodman
sudo podman restart CONTAINER_NAME
Kubernetes
Wenn Sie das Flag google_columnar_engine.memory_size_in_mb festlegen möchten, ändern Sie das Manifest Ihres Datenbankclusters, um das Attribut parameters dem Abschnitt primarySpec hinzuzufügen:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
name: CLUSTER_NAME
spec:
databaseVersion: "15.7.1"
primarySpec:
parameters:
google_columnar_engine.memory_size_in_mb: "COLUMN_MEMORY_SIZE"
Ersetzen Sie Folgendes:
CLUSTER_NAME: der Name Ihres Datenbankclusters. Das ist derselbe Datenbankclustername, den Sie beim Erstellen des Clusters angegeben haben.COLUMN_MEMORY_SIZE: die neue Größe des Spaltenspeichers in Megabyte, z. B.256.
Speicher-Cache konfigurieren
Bevor Sie den Speicher-Cache konfigurieren, müssen Sie den AlloyDB Omni-Laufwerks-Cache aktivieren.
Die Schritte zum Festlegen dieses Flags für eine Instanz hängen davon ab, ob Sie AlloyDB Omni in einem Container oder in einem Kubernetes-Cluster ausführen.
Einzelserver
Konfigurieren Sie den Speichercache so:
ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;Ersetzen Sie
STORAGE_CACHE_SIZEdurch die gewünschte Größe des Speichercaches in Megabyte. Standardmäßig werden 5 % des Datenträger-Cache der spaltenbasierten Engine zugewiesen. Der maximal zulässige Wert für dieses Flag beträgt 50% des gesamten Datenträger-Cache oder 1.000 * google_columnar_engine.memory_size_in_mb, je nachdem, welcher Wert kleiner ist.Damit die Änderungen an den Konfigurationsparametern wirksam werden, starten Sie den Container mit AlloyDB Omni neu.
Docker
sudo docker restart CONTAINER_NAMEPodman
sudo podman restart CONTAINER_NAME
Kubernetes
Wenn Sie den Speichercache für Ihre Datenbank aktivieren möchten, ändern Sie das Manifest Ihres Datenbankclusters, um das Attribut columnarSpillToDisk dem Abschnitt features des Abschnitts primarySpec hinzuzufügen:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
name: CLUSTER_NAME
spec:
databaseVersion: "15.7.1"
primarySpec:
features:
columnarSpillToDisk:
cacheSize: STORAGE_CACHE_SIZE
ultraFastCache:
cacheSize: ULTRAFAST_CACHE_SIZE
genericVolume:
storageClass: "STORAGE_CLASS_NAME"
...
Ersetzen Sie Folgendes:
CLUSTER_NAME: der Name Ihres Datenbankclusters. Das ist derselbe Datenbankclustername, den Sie beim Erstellen des Clusters angegeben haben.STORAGE_CACHE_SIZE: die Größe des spaltenbasierten Speichercaches, z. B.5Gi. Wenn Sie keinen Wert für dieses Feld angeben, werden standardmäßig 5 % des Datenträger-Cache der spaltenorientierten Engine zugewiesen.ULTRAFAST_CACHE_SIZE: die Größe des Cache, z. B.100Gi. Es muss größer alsshared_bufferssein. Dieses Feld ist optional. Wenn Sie den Wert dieses Felds nicht angeben, verwendet AlloyDB Omni den gesamten verbleibenden Speicherplatz auf dem Laufwerk. Dies gilt sowohl für AlloyDB Omni in einem Container als auch in einem Kubernetes-Cluster. Weitere Informationen zu Maßeinheiten finden Sie unter Arbeitsspeicherressourceneinheiten.STORAGE_CLASS_NAME: der Name der Speicherklasse des ultraschnellen Cache-Volumes, z. B.local-storage.
Vektorisierte Joins aktivieren
Die spaltenbasierte Engine bietet die Funktion vektorisierter Join, mit der die Leistung von Joins verbessert werden kann, indem die vektorisierte Verarbeitung auf qualifizierte Abfragen angewendet wird.
Nachdem Sie den vektorisierten Join aktiviert haben, kann der AlloyDB-Abfrageplaner den vektorisierten Join-Operator anstelle des Standard-PostgreSQL-Hash-Join-Operators anwenden. Der Planer trifft diese Entscheidung, indem er die Kosten für die Ausführung der Abfrage mit den einzelnen Methoden vergleicht.
Wenn Sie den vektorisierten Join für eine Instanz aktivieren möchten, setzen Sie das Flag google_columnar_engine.enable_vectorized_join der Instanz auf on.
ALTER SYSTEM aus:
ALTER SYSTEM SET google_columnar_engine.enable_vectorized_join = 'on';
AlloyDB Omni weist dem vektorisierten Join-Feature standardmäßig einen Thread zu. Sie können die Anzahl der für dieses Feature verfügbaren Threads erhöhen, indem Sie das Flag google_columnar_engine.vectorized_join_threads auf einen größeren Wert setzen. Der Höchstwert ist cpu_count * 2.
Spaltenbasierte Engine manuell aktualisieren
Wenn die spaltenbasierte Engine aktiviert ist, wird der Spaltenspeicher standardmäßig im Hintergrund aktualisiert.
Führen Sie die folgende SQL-Abfrage aus, um die spaltenbasierte Engine manuell zu aktualisieren:
SELECT google_columnar_engine_refresh(relation =>'TABLE_NAME');
Ersetzen Sie TABLE_NAME durch den Namen der Tabelle oder der materialisierten Ansicht, die Sie manuell aktualisieren möchten.
Spaltenbasierte Engine deaktivieren
Wenn Sie die spaltenbasierte Engine für eine Instanz deaktivieren möchten, setzen Sie das Flag google_columnar_engine.enabled auf off.
Die Schritte zum Festlegen dieses Flags für eine Instanz hängen davon ab, ob Sie AlloyDB Omni in einem Container oder in einem Kubernetes-Cluster ausführen.
Einzelserver
So setzen Sie google_columnar_engine.enabled auf off:
- Führen Sie den PostgreSQL-Befehl
ALTER SYSTEMaus:
ALTER SYSTEM SET google_columnar_engine.enabled = 'off'
- Damit die Änderungen an den Konfigurationsparametern wirksam werden, starten Sie den Container mit AlloyDB Omni neu.
Docker
Wenn Sie einen AlloyDB Omni-Container neu starten möchten, führen Sie den Befehl docker container restart aus:
sudo docker restart CONTAINER_NAMEErsetzen Sie CONTAINER_NAME durch den Namen, den Sie dem AlloyDB Omni-Container bei der Installation zugewiesen haben.
Podman
Wenn Sie einen AlloyDB Omni-Container neu starten möchten, führen Sie den Befehl podman container start aus:
sudo podman restart CONTAINER_NAMEErsetzen Sie CONTAINER_NAME durch den Namen, den Sie dem AlloyDB Omni-Container bei der Installation zugewiesen haben.
Kubernetes
Wenn Sie das Flag google_columnar_engine.enabled auf off setzen möchten, ändern Sie das Manifest Ihres Datenbankclusters, um das Attribut parameters dem Abschnitt primarySpec hinzuzufügen:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
name: CLUSTER_NAME
spec:
databaseVersion: "15.7.1"
primarySpec:
parameters:
google_columnar_engine.enabled: "off"
Ersetzen Sie CLUSTER_NAME durch den Namen Ihres Datenbankclusters. Das ist derselbe Datenbankclustername, den Sie beim Erstellen des Clusters angegeben haben.
Fehlerbehebung bei der spaltenbasierten Engine
Fehler insufficient shared memory beheben
Wenn Sie AlloyDB Omni ohne genügend gemeinsam genutzten Arbeitsspeicher für die spaltenbasierte Engine ausführen, wird möglicherweise der folgende Fehler angezeigt:
Insufficient shared memory for generating the columnar formats.
Sie können dieses Problem beheben, indem Sie die Menge an gemeinsam genutztem Arbeitsspeicher angeben, die dem AlloyDB Omni-Container zur Verfügung steht. Die Vorgehensweise hängt vom Betriebssystem des Hosts ab.
Linux
Erhöhen Sie die Größe der /dev/shm-Partition Ihres Hostcomputers, indem Sie beispielsweise die Datei /etc/fstab bearbeiten.
macOS
Installieren Sie einen neuen AlloyDB Omni-Container und geben Sie einen größeren Wert für den gemeinsam genutzten Speicher für das Flag --shm-size an.
Fehler beheben, wenn Spalten nicht ausgefüllt werden
Wenn Spalten in der spaltenbasierten Engine nicht ausgefüllt werden, kann dies folgende Ursachen haben:
Die Spalten, die Sie hinzufügen möchten, enthalten einen nicht unterstützten Datentyp.
Die Anforderungen der spaltenbasierten Engine werden nicht erfüllt.
Versuchen Sie Folgendes, um dieses Problem zu beheben:
- Prüfen Sie, ob die Tabellen oder materialisierten Ansichten in der Abfrage in der spaltenbasierten Engine enthalten sind.
- Prüfen Sie die Verwendung der spaltenbasierten Engine mit der Anweisung
EXPLAIN.
Nächste Schritte
Vollständige Liste der Datenbank-Flags für die spaltenbasierte Engine
Arbeiten Sie das Google CodeLab-Tutorial Schnellere Analyseabfragen mit der spaltenbasierten Engine in AlloyDB Omni durch.