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.
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
.
-
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
. - Erstellen Sie das
ext4
-Dateisystem auf dem logischen Volume. Bei Bedarf können Sie weitereext4
-Optionen angeben, die der Datensicherheit unterliegen.sudo mkfs.ext4 /dev/VOLUME_GROUP/LOGICAL_VOLUME
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 wieOMNI_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 wieOMNI_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.
-
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
-
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';
-
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;
-
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:
- Sie haben einen Cluster mit lokalem SSD-basiertem Speicher erstellt.
- Sie haben Ihr Volume mit Schritt 1 unter Statischen Bereitsteller für lokale Volumes ausführen mit dem ext4-Dateisystem formatiert.
- 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:
Ändern Sie das Manifest Ihres Datenbankclusters, um dem Abschnitt
features
des Abschnittsspec
das AttributultraFastCache
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 alsshared_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 desstorage class
des ultraschnellen Cache-Volumes, z. B.local-storage
.
- 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:
- Sie haben einen Cluster mit lokalem SSD-basiertem Speicher erstellt.
- 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:
Ändern Sie das Manifest Ihres Datenbankclusters, um dem Abschnitt
features
des Abschnittsspec
das AttributultraFastCache
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 alsshared_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
oderNotIn
ist, darf das Wertearray nicht leer sein. - Wenn der Operator
Exists
oderDoesNotExist
ist, muss das Werte-Array leer sein. - Wenn der Operator
Gt
oderLt
ist, muss das Wertearray ein einzelnes Element enthalten, das als Ganzzahl interpretiert wird.
- Wenn der Operator
- 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.