Aktualität von In-Memory-Spaltenspeicherdaten aufrechterhalten

Wählen Sie eine Dokumentationsversion aus:

Auf dieser Seite wird beschrieben, wie Sie die Aktualität der Daten im Spaltenspeicher der spaltenorientierten Engine in AlloyDB Omni mit dem RPM-Orchestrator aufrechterhalten.

Wenn Tabellenzeilen hinzugefügt, gelöscht oder aktualisiert werden, aktualisiert die spaltenbasierte Engine die Daten im Spaltenspeicher nicht sofort. Stattdessen werden betroffene Inhalte im Spaltenspeicher als ungültig markiert und Abfragen werden 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 Aktualisierungsschwellenwert von 50. Das bedeutet, dass bestimmte Inhalte im Spaltenspeicher für die Aktualisierung markiert werden, wenn 50 % der Inhalte ungültig geworden sind. Sie können diesen Aktualisierungs schwellenwert ändern, um den Aufwand der automatischen Aktualisierung anzupassen und möglicherweise eine bessere laufende Abfrageleistung für Ihre Anwendung zu erzielen.

Außerdem können Sie Tabellen und ScaNN-Indizes, die in die spaltenorientierte Engine geladen wurden, jederzeitmanuell aktualisieren. Normalerweise führen Sie eine manuelle Aktualisierung 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 ungültiger Daten für Ihre Tabellen und materialisierten Ansichten abfragen, indem Sie die Ansicht g_columnar_relations abfragen. So können Sie entscheiden, ob Sie eine manuelle Aktualisierung durchführen oder den Schwellenwert für die automatische Aktualisierung anpassen müssen.

Führen Sie die folgende Abfrage aus, um den Prozentsatz der Ungültigkeit für alle Beziehungen im Spaltenspeicher aufzurufen:

SELECT relation_name, invalid_percentage FROM g_columnar_relations;

Wenn Sie den Prozentsatz der Ungültigkeit 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 mit dem Namen der Tabelle oder der materialisierten Ansicht. 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 der Ungültigkeit 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

Aktualisierungsgrenzwert der spaltenbasierten Engine ändern

So ändern Sie den Aktualisierungsgrenzwert der spaltenbasierten Engine:

  1. Öffnen Sie das Manifest des Datenbankclusters DBCluster.

  2. Fügen Sie im Abschnitt primarySpec den Parameter google_columnar_engine.refresh_threshold_percentage dem Block parameters hinzu:

    DBCluster:
      metadata:
        name: DB_CLUSTER_NAME
      spec:
        # ... existing cluster configuration ...
        primarySpec:
          # ... existing primary configuration ...
          parameters:
            google_columnar_engine.refresh_threshold_percentage: "THRESHOLD"
    

    Ersetzen Sie Folgendes:

    • DB_CLUSTER_NAME: der Name des Datenbankclusters.
    • THRESHOLD: ein ganzzahliger Wert zwischen 1 und 100. 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.
  3. Der RPM-Orchestrator startet die Datenbank automatisch neu, um die Parameteränderungen anzuwenden. Wenden Sie das aktualisierte DBCluster-Manifest mit einer der folgenden Methoden an:

    alloydbctl

    alloydbctl apply -d "DEPLOYMENT_SPEC_PATH" -r "DBCLUSTER_SPECIFICATION"

    Ersetzen Sie Folgendes:

    • DEPLOYMENT_SPEC_PATH: der Pfad zu Ihrem Verteilungsspezifikationsverzeichnis.
    • DBCLUSTER_SPECIFICATION: der Pfad zum geänderten DBCluster-Manifest.

    Ansible

    1. Erstellen Sie eine update.yml-Playbook-Datei:

      ---
      - hosts: localhost
        vars:
          update_action: "update_resource_spec"
          ansible_user: SSH_USER
          ansible_ssh_private_key_file: SSH_KEY_PATH
        roles:
          - role: google.alloydbomni_orchestrator.update
      

      Ersetzen Sie Folgendes:

      • SSH_USER: der Nutzername, mit dem Sie sich über SSH mit den Knoten in Ihrem Cluster verbinden.
      • SSH_KEY_PATH: der lokale Pfad zur privaten SSH-Schlüsseldatei, die für die Verbindung zu Ihren Knoten verwendet wird.
    2. Führen Sie das Playbook von Ihrem Steuerknoten aus und übergeben Sie die Ressourcenspezifikation als zusätzliche Variable:

      ansible-playbook -i "DEPLOYMENT_SPEC_PATH" update.yml \
        -e resource_spec="DBCLUSTER_SPECIFICATION"

      Ersetzen Sie Folgendes:

      • DEPLOYMENT_SPEC_PATH: der Pfad zu Ihrem Verteilungsspezifikationsverzeichnis.
      • DBCLUSTER_SPECIFICATION: der Pfad zum geänderten DBCluster-Manifest.

Tabellen und Vektorindizes im Spaltenspeicher manuell aktualisieren

Sie können Tabellen und Vektorindizes in der spaltenorientierten Engine jederzeit manuell mit speziellen 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 spaltenorientierten Engine zu aktualisieren.

SELECT google_columnar_engine_refresh(TABLE_NAME);

Ersetzen Sie TABLE_NAME durch einen String mit dem Namen der Tabelle oder der materialisierten Ansicht. 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.

Führen Sie die Funktion google_columnar_engine_refresh_index aus, um einen Vektorindex in der spaltenorientierten Engine manuell zu aktualisieren.

SELECT google_columnar_engine_refresh_index(index => INDEX_NAME);

Ersetzen Sie INDEX_NAME durch einen String mit dem Namen des zu aktualisierenden Index.