Aktualität von In-Memory-Spaltenspeicherdaten aufrechterhalten

Wenn sich Zeilen ändern, markiert die spaltenbasierte Engine die betroffenen Spaltenspeicherdaten in AlloyDB for PostgreSQL als ungültig und die Abfragebeschleunigung nimmt allmählich ab. Damit Abfragen schnell bleiben, können Sie den Schwellenwert für die automatische Aktualisierung anpassen oder Tabellen und Vektorindexe manuell aktualisieren.

Die spaltenbasierte Engine aktualisiert den Spaltenspeicher nicht sofort, wenn Tabellenzeilen hinzugefügt, gelöscht oder aktualisiert werden. Stattdessen werden Abfragen sowohl mit spaltenorientierten Daten aus dem Spaltenspeicher als auch mit zeilenorientierten Daten aus dem Zeilencache und dem Datenbankspeicher geplant und ausgeführt.

Im Laufe der Zeit werden immer mehr Datenblöcke ungültig. Die Leistungssteigerungen durch die spaltenorientierte Engine werden dann so weit reduziert, dass die spaltenorientierten Daten aktualisiert werden müssen, um die Abfrageleistung wieder zu verbessern. Wenn dieser Aktualisierungsschwellenwert erreicht ist, verwendet die spaltenorientierte Engine einen Hintergrundjob, um die ungültigen Daten im Spaltenspeicher zu aktualisieren. Standardmäßig verwendet die spaltenorientierte Engine einen Aktualisierungsgrenzwert von 25. Das bedeutet, dass bestimmte Inhalte im Spaltenspeicher für die Aktualisierung markiert werden, wenn 25% der Inhalte ungültig geworden sind. Sie können diesen Aktualisierungsschwellenwert ändern, um den Aufwand der automatischen Aktualisierung anzupassen und möglicherweise eine bessere laufende Abfrageleistung für Ihre Anwendung zu erzielen.

Führen Sie eine manuelle Aktualisierung von Tabellen und HNSW- und ScaNN-Vektorindexen durch, wenn Änderungen an einer Tabelle so schnell wie möglich nach der Vornahme der Änderungen im Spaltenspeicher berücksichtigt werden sollen.

Prozentsatz ungültiger Daten prüfen

Wenn Ihre Anwendung Zeilen in einer Tabelle hinzufügt, löscht oder aktualisiert, markiert die spaltenorientierte Engine die betroffenen Daten im Spaltenspeicher als ungültig. Sie können den Prozentsatz der ungültigen Daten für Ihre Tabellen und materialisierten Ansichten prüfen, indem Sie die Ansicht g_columnar_relations abfragen. So können Sie entscheiden, ob Sie eine manuelle Aktualisierung durchführen oder den Grenzwert für die automatische Aktualisierung anpassen müssen.

Führen Sie die folgende Abfrage aus, um den Prozentsatz ungültiger Daten für alle Relationen im spaltenbasierten Speicher aufzurufen:

SELECT relation_name, invalid_percentage FROM g_columnar_relations;

Wenn Sie den Prozentsatz ungültiger Daten für eine bestimmte Tabelle prüfen möchten, fügen Sie der Abfrage eine WHERE-Klausel hinzu.

SELECT   relation_name,
  CASE
    WHEN total_block_count > 0 THEN (invalid_block_count * 100.0 / total_block_count)
    ELSE 0.0
  END AS invalid_block_percentage
FROM
  g_columnar_relations
WHERE
 relation_name = 'TABLE_NAME';

Ersetzen Sie TABLE_NAME durch einen String, der den Namen der Tabelle oder der materialisierten Ansicht enthält. Wenn sich die Ressource in einem anderen Schema als public befindet, geben Sie den Namen des Schemas im Format SCHEMA_NAME.TABLE_NAME an, z. B. myschema.mytable.

Wenn Sie den Prozentsatz ungültiger Daten für einen bestimmten Index prüfen möchten, fügen Sie der Abfrage eine WHERE-Klausel hinzu.

SELECT   index_name,
  CASE
    WHEN total_block_count > 0 THEN (invalid_block_count * 100.0 / total_block_count)
    ELSE 0.0
  END AS invalid_block_percentage
FROM
  g_columnar_indexes
WHERE
  index_name = 'INDEX_NAME';

Ersetzen Sie INDEX_NAME durch einen String, der den Namen des Vektorindex enthält.

Aktualisierungsgrenzwert der spaltenbasierten Engine ändern

Wenn Sie den Aktualisierungsgrenzwert der spaltenbasierten Engine ändern möchten, müssen Sie den Wert des Datenbank-Flags google_columnar_engine.refresh_threshold_percentage für Ihre AlloyDB-Instanz ändern.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Cluster auf.

    Zu den Clustern

  2. Klicken Sie auf den Namen des Clusters, der die Instanz enthält, die Sie konfigurieren möchten.
  3. Suchen Sie im Abschnitt Instanzen in Ihrem Cluster nach der Instanz und klicken Sie auf Bearbeiten.
  4. Fügen Sie im Abschnitt Flags entweder ein neues Flag hinzu oder ändern Sie das vorhandene google_columnar_engine.refresh_threshold_percentage-Flag.
  5. Legen Sie den Wert auf eine Ganzzahl zwischen 0 und 100 fest (oder auf -1, um die automatische Aktualisierung zu deaktivieren). Dieser Wert gibt den Prozentsatz der ungültigen Daten an, der eine Aktualisierung auslöst.
  6. Klicken Sie auf Fertig.

gcloud

Wenn Sie die gcloud CLI verwenden möchten, können Sie die Google Cloud CLI installieren und initialisieren oder Cloud Shell verwenden.

Führen Sie den folgenden Befehl aus, um den Aktualisierungsgrenzwert der spaltenbasierten Engine zu ändern:
gcloud alloydb instances update INSTANCE_ID \
    --database-flags=google_columnar_engine.refresh_threshold_percentage=THRESHOLD \
    --cluster=CLUSTER_ID \
    --region=REGION_ID \
    --project=PROJECT_ID

Ersetzen Sie Folgendes:

  • INSTANCE_ID: die ID der Instanz.
  • THRESHOLD: Ein ganzzahliger Wert zwischen 0 und 100 (oder -1, um die automatische Aktualisierung zu deaktivieren). Dieser Wert gibt den Prozentsatz der Datenblöcke im Inhalt an, die ungültig werden müssen, damit der Inhalt für die Aktualisierung markiert wird.
  • CLUSTER_ID: die ID des Clusters, in dem sich die Instanz befindet.
  • REGION_ID: Die Region des Clusters.
  • PROJECT_ID: die ID des Projekts.

Tabellen und Vektorindexe im Spaltenspeicher manuell aktualisieren

Sie können Tabellen und Vektorindexe in der spaltenorientierten Engine jederzeit manuell mit dedizierten SQL-Funktionen aktualisieren. Die unterstützten Indextypen sind ScaNN und HNSW.

Führen Sie die Funktion google_columnar_engine_refresh aus, um die Daten einer Tabelle in der spaltenbasierten Engine zu aktualisieren.

SELECT google_columnar_engine_refresh('TABLE_NAME');

Ersetzen Sie TABLE_NAME durch einen String, der den Namen der Tabelle oder der materialisierten Ansicht enthält. Wenn sich die Ressource in einem anderen Schema als public befindet, geben Sie den Namen des Schemas im Format SCHEMA_NAME.TABLE_NAME an, z. B. myschema.mytable.

Wenn Sie einen Vektorindex in der spaltenbasierten Engine manuell aktualisieren möchten, führen Sie die Funktion google_columnar_engine_refresh_index aus.

SELECT google_columnar_engine_refresh_index(index => 'INDEX_NAME');

Ersetzen Sie INDEX_NAME durch einen String, der den Namen des zu aktualisierenden Index enthält.