Datenbankleistung mithilfe des Laufwerk-Caches beschleunigen

Auf dieser Seite wird beschrieben, wie Sie das Laufwerk-Caching in AlloyDB Omni bereitstellen, einrichten und verwenden, um die Leistung Ihrer AlloyDB Omni-Installation zu steigern.

Zusätzlich zu den standardmäßigen freigegebenen speicherinternen Puffern von PostgreSQL ermöglicht der AlloyDB Omni-Speicher-Cache das Speichern von Puffern auf schnellem Speicher wie Solid-State-Laufwerken (SSDs). Das Laufwerk-Caching beschleunigt das Abrufen von Daten in AlloyDB Omni-Installationen mit Datenverzeichnissen auf einem langsameren Speicher.

Wie die freigegebenen Buffers von PostgreSQL ist der AlloyDB Omni-Laufwerkcache nicht persistent. Das bedeutet, dass zwischengespeicherte Daten beim Neustart verloren gehen.

Standardmäßig verwendet der AlloyDB Omni-Laufwerkcache den gesamten vom Dateisystem gemeldeten Speicherplatz. Mit dem Parameter omni_disk_cache_file_size können Sie die Größe des Speichers festlegen, der für das Caching von Daten reserviert ist.

AlloyDB Omni-Laufwerkcache aktivieren

Die Schritte zum Aktivieren des Datenträgercaches für AlloyDB Omni hängen davon ab, ob Sie AlloyDB Omni in einem Container oder in einem Kubernetes-Cluster ausführen.

Ein Server

Laufwerke bereitstellen und ein Dateisystem erstellen

Für den AlloyDB Omni-Laufwerkcache erstellen Sie ein Dateisystem auf einem oder mehreren Laufwerken und stellen es in einem Container mit AlloyDB Omni bereit. Außerdem können Sie Dienstprogramme wie mdadm oder lvm verwenden, um die Kapazität mit mehreren Laufwerken zu bündeln und jedes beliebige Dateisystem zu verwenden.

In den folgenden Schritten wird die Verwendung von lvm und ext4 auf einer Ubuntu Compute Engine-Instanz mit NVMe-SSDs veranschaulicht.

  1. Erstellen Sie eine Volumegruppe aus allen verfügbaren physischen Geräten:

      nvme_prefix="STORAGE_PREFIX"
      nvme_list=$(ls "$nvme_prefix"*)
      sudo vgcreate VOLUME_GROUP ${nvme_list}

    Ersetzen Sie Folgendes:

    • STORAGE_PREFIX: Prefix des Pfads zu den Ziellaufwerken, die über die NVMe-Schnittstelle (Non-Volatile Memory Express) an eine virtuelle Maschine angehängt sind. Auf Google Cloudbeginnen die NVMe-Gerätepfade beispielsweise immer mit /dev/nvme0n.
    • VOLUME_GROUP: Der Name einer Volumegruppe, in der Ihre SSDs kombiniert werden, z. B. omni-disk-cache-volume.
  2. Verwenden Sie den folgenden Befehl, um ein logisches Volume aus der freien Kapazität der Volumegruppe aus dem vorherigen Schritt zu erstellen:

      sudo lvcreate -n LOGICAL_VOLUME -l 100%FREE VOLUME_GROUP

    Ersetzen Sie LOGICAL_VOLUME durch den Namen eines logischen Volumes, das von LVM als Partition behandelt wird, z. B. omni_disk_cache_device.

  3. Erstellen Sie das ext4-Dateisystem auf dem logischen Volume. Bei Bedarf können Sie weitere ext4-Optionen angeben, die der Datensicherheit unterliegen.
      sudo mkfs.ext4 /dev/VOLUME_GROUP/LOGICAL_VOLUME
  4. Verwenden Sie den folgenden Befehl, um ein Verzeichnis als Bereitstellungspunkt auf dem Hostcomputer zu erstellen und das Dateisystem bereitzustellen:

      sudo mkdir /OMNI_DISK_CACHE_DIRECTORY
      sudo mount /dev/VOLUME_GROUP/LOGICAL_VOLUME /OMNI_DISK_CACHE_DIRECTORY

    Ersetzen Sie OMNI_DISK_CACHE_DIRECTORY durch den Namen des Verzeichnisses oder einen Pfad zum Verzeichnis, das als Bereitstellungspunkt dient, z. B. omni_disk_cache_directory.

Cacheverzeichnis in AlloyDB Omni bereitstellen

Bevor Sie den Laufwerkcache für AlloyDB Omni aktivieren, das in einem Container ausgeführt wird, müssen Sie das Cacheverzeichnis in AlloyDB Omni bereitstellen.

Informationen zum Installieren und Anpassen von AlloyDB Omni über ein Docker-Image finden Sie unter AlloyDB Omni-Installation anpassen.

Verwenden Sie den folgenden Befehl, um die OMNI_DISK_CACHE_DIRECTORY in Ihrem Docker-Container mit AlloyDB Omni bereitzustellen:

Docker

      sudo docker run --name CONTAINER_NAME \
        -e POSTGRES_PASSWORD=PASSWORD \
        -e PGDATA=/var/lib/postgresql/data/pgdata \
        -v DATA_DIR:/var/lib/postgresql/data \
        -v /OMNI_DISK_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER \
        -d google/alloydbomni
      

Ersetzen Sie Folgendes:

  • CONTAINER_NAME: Der Name, der dem neuen AlloyDB Omni-Container zugewiesen werden soll, z. B. my-omni.
  • PASSWORD: Das Passwort für den Root-Administrator Ihrer PostgreSQL-Datenbank.
  • DATA_DIR: Der Dateisystempfad, den AlloyDB Omni für sein Datenverzeichnis verwenden soll.
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: das Cache-Verzeichnis im AlloyDB Omni-Container, das dem Bereitstellungspunkt auf dem Hostcomputer zugeordnet ist. Der Wert des Cache-Verzeichnisses im Container ist entweder /omni_disk_cache_directory, ähnlich wie OMNI_DISK_CACHE_DIRECTORY, oder /disk/cache/inside/container.

Podman

      podman run --name CONTAINER_NAME \
        -e POSTGRES_PASSWORD=PASSWORD \
        -e PGDATA=/var/lib/postgresql/data/pgdata \
        -v DATA_DIR:/var/lib/postgresql/data \
        -v /OMNI_DISK_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER \
        -d docker.io/google/alloydbomni
      

Ersetzen Sie Folgendes:

  • CONTAINER_NAME: Der Name, der dem neuen AlloyDB Omni-Container zugewiesen werden soll, z. B. my-omni.
  • PASSWORD: Das Passwort für den Root-Administrator Ihrer PostgreSQL-Datenbank.
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: das Cache-Verzeichnis im AlloyDB Omni-Container, das dem Bereitstellungspunkt auf dem Hostcomputer zugeordnet ist. Der Wert des Cache-Verzeichnisses im Container ist entweder /omni_disk_cache_directory, ähnlich wie OMNI_DISK_CACHE_DIRECTORY, oder /disk/cache/inside/container.

Verwenden Sie die folgenden Befehle, um dem bereitgestellten OMNI_DISK_CACHE_DIRECTORY die Berechtigung „Vollzugriff“ zu gewähren:

Docker

      sudo docker exec -it CONTAINER_NAME chown postgres:postgres /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
      sudo docker exec -it CONTAINER_NAME chmod -R a+rw  /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
      

Podman

      sudo podman exec -it CONTAINER_NAME chown postgres:postgres /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
      sudo podman exec -it CONTAINER_NAME chmod -R a+rw  /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
      

AlloyDB Omni-Dateicache für AlloyDB Omni aktivieren, das in einem Container ausgeführt wird

Wenn Sie den AlloyDB Omni-Laufwerkcache für Ihre Datenbank aktivieren möchten, legen Sie die entsprechenden GUC-Parameter (Grand Unified Configuration) fest. Achten Sie dabei darauf, dass das bereitgestellte Cache-Verzeichnis von innerhalb des Docker-Containers aus zugänglich ist.

  1. Verwenden Sie den folgenden Befehl, um als Superuser eine Verbindung zur containerisierten AlloyDB Omni-Datenbank herzustellen:

    Docker

          sudo docker exec -it CONTAINER_NAME psql -h localhost -U postgres
          

    Podman

          sudo podman exec -it CONTAINER_NAME psql -h localhost -U postgres
          
  2. Verwenden Sie die folgenden Befehle in der AlloyDB Omni-Datenbank, um den Wert der Parameter festzulegen:

            alter system set omni_disk_cache_enabled=on;
            alter system set omni_disk_cache_directory='/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER';
          
  3. Standardmäßig verwendet AlloyDB Omni den gesamten verfügbaren Speicherplatz im Dateisystem. Bei Bedarf können Sie den Standardwert mit dem Parameter omni_disk_cache_file_size überschreiben.

          alter system set omni_disk_cache_file_size=SIZE_IN_MB;
          
  4. Damit die Änderungen an den Caching-Konfigurationsparametern wirksam werden, müssen Sie den laufenden Container mit AlloyDB Omni neu starten:

    Docker

          sudo docker restart CONTAINER_NAME
          

    Podman

          sudo podman restart CONTAINER_NAME
          

Kubernetes

Datenträger-Cache auf einem generischen Volume aktivieren

Sie können den Laufwerkcache mit einem generischen Volume aktivieren.

Wenn Sie den Laufwerkcache für ein generisches Volume auf dem AlloyDB Omni Kubernetes-Operator aktivieren möchten, benötigen Sie ein persistentes Volume und einen storageClass.

Wenn Sie beispielsweise GKE verwenden und das persistente Volume und storageClass nicht bereit sind, müssen Sie Folgendes tun, bevor Sie den Laufwerkcache auf einem generischen Volume aktivieren:

  1. Sie haben einen Cluster mit lokalem SSD-basiertem Speicher erstellt.
  2. Sie haben Ihr Volume mit Schritt 1 unter Statischen Bereitsteller für lokale Volumes ausführen mit dem ext4-Dateisystem formatiert.
  3. Sie haben manuell ein nichtflüchtiges Volume für jede SSD in Ihrem Cluster erstellt, wobei die storageClass den nichtflüchtigen Speicher auf einem Speichergerät definiert.

Führen Sie die folgenden Schritte aus, um den Laufwerkcache auf einem generischen Volume für Ihre Datenbank zu aktivieren:

  1. Ändern Sie das Manifest Ihres Datenbankclusters, um dem Abschnitt features des Abschnitts spec das Attribut ultraFastCache hinzuzufügen:

        apiVersion: alloydbomni.dbadmin.goog/v1
        kind: DBCluster
        metadata:
          name: CLUSTER_NAME
        spec:
          databaseVersion: "15.7.0"
          primarySpec:
            features:
              ultraFastCache:
                cacheSize: DISK_CACHE_SIZE
                genericVolume:
                  storageClass: "STORAGE_CLASS_NAME"
         ...
          

    Ersetzen Sie Folgendes:

    • DB_CLUSTER_NAME: Der Name Ihres Datenbankclusters. Dies ist derselbe Name des Datenbankclusters, den Sie beim Erstellen angegeben haben.
    • DISK_CACHE_SIZE: die Größe des Caches, z. B. 100Gi. Es muss größer als shared_buffers sein. 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.
    • STORAGE_CLASS_NAME: Der Name des storage class des ultraschnellen Cache-Volumes, z. B. local-storage.
  2. Wenden Sie das Manifest noch einmal an.

Laufwerkcache auf einem lokalen Volume aktivieren

Wenn Sie ein lokales Volume verwenden möchten, müssen Sie kein nichtflüchtiges Volume erstellen. Sie können stattdessen die folgende Optimierung verwenden.

Wenn Sie beispielsweise GKE verwenden und das persistente Volume und storageClass nicht bereit sind, müssen Sie Folgendes tun, bevor Sie den Laufwerkcache auf einem lokalen Volume aktivieren:

  1. Sie haben einen Cluster mit lokalem SSD-basiertem Speicher erstellt.
  2. Sie haben Ihr Volume mit Schritt 1 unter Statischen Bereitsteller für lokale Volumes ausführen mit dem ext4-Dateisystem formatiert.

So aktivieren Sie den Laufwerkcache auf einem lokalen Volume für Ihre Datenbank:

  1. Ändern Sie das Manifest Ihres Datenbankclusters, um dem Abschnitt features des Abschnitts spec das Attribut ultraFastCache hinzuzufügen:

        apiVersion: alloydbomni.dbadmin.goog/v1
        kind: DBCluster
        metadata:
          name: CLUSTER_NAME
        spec:
          databaseVersion: "15.7.0"
          primarySpec:
            features:
              ultraFastCache:
                cacheSize: DISK_CACHE_SIZE
                localVolume:
                  path: "LOCAL_VOLUME_PATH"
                  nodeAffinity:
                    required:
                      nodeSelectorTerms:
                      - matchExpressions:
                        - key: "LABEL_KEY"
                          operator: "OPERATOR_VALUE"
                          values:
                          - "LABEL_KEY_VALUE"
        ...
          

    Ersetzen Sie Folgendes:

    • CLUSTER_NAME: Der Name Ihres Datenbankclusters. Dies ist derselbe Name des Datenbankclusters, den Sie beim Erstellen angegeben haben.
    • DISK_CACHE_SIZE: die Größe des Caches, z. B. 100Gi. Es muss größer als shared_buffers sein. 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.
    • STORAGE_CLASS_NAME: Der Name der Speicherklasse.
    • LOCAL_VOLUME_PATH: der Pfad zum lokalen Volume, z. B. /mnt/disks/raid/0.
    • LABEL_KEY: Das Label des Knotens für den Schlüssel, der als Standortindikator dient und eine gleichmäßige Pod-Verteilung im Cluster ermöglicht, z. B. cloud.google.com/gke-local-nvme-ssd.
    • OPERATOR_VALUE: die Beziehung des Schlüssels zu einer Reihe von Werten, z. B. In. Legen Sie einen der folgenden Werte für den Parameter fest:
      • In: Das Array „values“ darf nicht leer sein.
      • NotIn: Das Array „values“ darf nicht leer sein.
      • Exists: Das Array „values“ muss leer sein.
      • DoesNotExist: Das Array „values“ muss leer sein.
      • Gt: Das Werte-Array muss ein einzelnes Element enthalten, das als Ganzzahl interpretiert wird.
      • Lt: Das Werte-Array muss ein einzelnes Element enthalten, das als Ganzzahl interpretiert wird.
    • LABEL_KEY_VALUE: der Wert für den Labelschlüssel, z. B. true. Legen Sie den Parameter wie unten beschrieben auf ein Array von Stringwerten fest:
      • Wenn der Operator In oder NotIn ist, darf das Wertearray nicht leer sein.
      • Wenn der Operator Exists oder DoesNotExist ist, muss das Werte-Array leer sein.
      • Wenn der Operator Gt oder Lt ist, muss das Wertearray ein einzelnes Element enthalten, das als Ganzzahl interpretiert wird.
  2. Wenden Sie das Manifest noch einmal an.

Laufwerkcache-Konfiguration prüfen

Nachdem Sie den AlloyDB Omni-Laufwerkcache aktiviert haben, prüfen Sie, ob auf den Laufwerkcache zugegriffen wird. Überwachen Sie dazu die Lese- und Schreibaktivitäten auf den Laufwerken mithilfe von verfügbaren Dienstprogrammen wie iotop oder iostat.

Außerdem können Sie prüfen, ob der AlloyDB Omni-Speichercache geöffnet ist.

Die Schritte zur Überprüfung der Festplattencache-Konfiguration für AlloyDB Omni hängen davon ab, ob Sie AlloyDB Omni in einem Container oder in einem Kubernetes-Cluster ausführen.

Ein Server

Docker

sudo docker logs CONTAINER_NAME 2>&1 | grep "opened omni disk cache"

Podman

sudo podman logs CONTAINER_NAME 2>&1 | grep "opened omni disk cache"

Kubernetes

  kubectl exec -i $DATABASE_POD -c database -n $DBCLUSTER_NAMESPACE -- cat /obs/diagnostic/postgresql.log | grep "opened omni disk cache"

Wenn das Laufwerk-Caching richtig konfiguriert ist, wird in den Protokollen die Meldung Successfully opened omni disk cache ... angezeigt.

Nächste Schritte