Accelera le prestazioni del database utilizzando la cache del disco

Seleziona una versione della documentazione:

Questa pagina descrive come eseguire il provisioning, configurare e utilizzare la memorizzazione nella cache del disco su AlloyDB Omni per aumentare le prestazioni dell'installazione di AlloyDB Omni.

Oltre ai buffer condivisi in memoria standard di PostgreSQL, la cache su disco di AlloyDB Omni consente di archiviare i buffer su un archivio veloce come le unità a stato solido (SSD). La memorizzazione nella cache su disco accelera il recupero dei dati nelle installazioni di AlloyDB Omni con directory di dati situate su uno spazio di archiviazione più lento.

Come i buffer condivisi di PostgreSQL, la cache del disco di AlloyDB Omni non è persistente, il che significa che i dati memorizzati nella cache vengono persi al riavvio.

Per impostazione predefinita, la cache del disco di AlloyDB Omni utilizza tutto lo spazio di archiviazione segnalato dal file system. Puoi definire la quantità di spazio di archiviazione riservato alla memorizzazione nella cache dei dati utilizzando il parametro omni_disk_cache_file_size.

Attiva la cache del disco AlloyDB Omni

Per attivare la cache su disco per AlloyDB Omni in un container:

Esegui il provisioning dei dischi e crea un file system

Per la cache del disco di AlloyDB Omni, crea un file system su uno o più dischi e montalo all'interno di un container con AlloyDB Omni. Inoltre, puoi utilizzare utilità come mdadm o lvm per raggruppare la capacità utilizzando più dischi e qualsiasi file system.

I seguenti passaggi mostrano l'utilizzo di lvm e ext4 su un'istanza Compute Engine Ubuntu che utilizza unità SSD NVMe.

  1. Crea un gruppo di volumi da tutti i dispositivi fisici disponibili:

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

    Sostituisci quanto segue:

    • STORAGE_PREFIX: il prefisso del percorso dei dischi locali di destinazione collegati a una macchina virtuale utilizzando l'interfaccia NVMe (Nonvolatile Memory Express). Ad esempio, su Google Cloud, i percorsi dei dispositivi NVMe iniziano sempre con /dev/nvme0n.
    • VOLUME_GROUP: il nome di un gruppo di volumi in cui sono combinate le unità SSD, ad esempio omni-disk-cache-volume.
  2. Per creare un volume logico dalla capacità libera del gruppo di volumi del passaggio precedente, utilizza il seguente comando:

      sudo lvcreate -n LOGICAL_VOLUME -l 100%FREE VOLUME_GROUP

    Sostituisci LOGICAL_VOLUME con il nome di un volume logico trattato come partizione da LVM, ad esempio omni_disk_cache_device.

  3. Crea il file system ext4 sul volume logico. Se necessario, puoi specificare altre opzioni di ext4 soggette alla sicurezza dei dati.
      sudo mkfs.ext4 /dev/VOLUME_GROUP/LOGICAL_VOLUME
  4. Per creare una directory che funga da punto di montaggio sulla macchina host e montare il file system, utilizza il seguente comando:

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

    Sostituisci OMNI_DISK_CACHE_DIRECTORY con il nome della directory o un percorso alla directory che funge da punto di montaggio, ad esempio omni_disk_cache_directory.

Monta la directory della cache all'interno di AlloyDB Omni

Prima di attivare la cache del disco per AlloyDB Omni in esecuzione in un container, devi montare la directory della cache all'interno di AlloyDB Omni.

Per informazioni sull'installazione di AlloyDB Omni da un'immagine Docker e sulla sua personalizzazione, consulta Personalizzare l'installazione di AlloyDB Omni.

Per montare OMNI_DISK_CACHE_DIRECTORY all'interno del container Docker che esegue AlloyDB Omni, utilizza questo comando:

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

Sostituisci quanto segue:

  • CONTAINER_NAME: il nome da assegnare al nuovo container AlloyDB Omni, ad esempio my-omni.
  • PASSWORD: la password dell'amministratore root del database PostgreSQL.
  • DATA_DIR: il percorso del file system che vuoi che AlloyDB Omni utilizzi per la directory dei dati.
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: la directory della cache all'interno del container AlloyDB Omni che esegue il mapping al punto di montaggio sulla macchina host, ad esempio in base al valore della directory della cache all'interno del container, /omni_disk_cache_directory, simile a OMNI_DISK_CACHE_DIRECTORY, o /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

Sostituisci quanto segue:

  • CONTAINER_NAME: il nome da assegnare al nuovo container AlloyDB Omni, ad esempio my-omni.
  • PASSWORD: la password dell'amministratore root del database PostgreSQL.
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: la directory della cache all'interno del container AlloyDB Omni che esegue il mapping al punto di montaggio sulla macchina host, ad esempio in base al valore della directory della cache all'interno del container, /omni_disk_cache_directory, simile a OMNI_DISK_CACHE_DIRECTORY, o /disk/cache/inside/container.

Per concedere le autorizzazioni di accesso completo a OMNI_DISK_CACHE_DIRECTORY montato, utilizza i seguenti comandi:

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
      

Attiva la cache del disco AlloyDB Omni

Per attivare la cache del disco AlloyDB Omni per il tuo database, imposta i parametri GUC (Grand Unified Configuration) appropriati dopo aver verificato che la directory della cache montata sia accessibile dall'interno del container Docker.

  1. Per connetterti al database AlloyDB Omni containerizzato come superutente, utilizza il seguente comando:

    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. Per impostare il valore dei parametri, utilizza i seguenti comandi all'interno del database AlloyDB Omni:

            alter system set omni_disk_cache_enabled=on;
            alter system set omni_disk_cache_directory='/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER';
          
  3. Per impostazione predefinita, AlloyDB Omni utilizza tutto lo spazio disponibile nel file system. Se necessario, puoi eseguire l'override del valore predefinito utilizzando il parametro omni_disk_cache_file_size.

          alter system set omni_disk_cache_file_size=SIZE_IN_MB;
          
  4. Affinché la modifica dei parametri di configurazione della memorizzazione nella cache diventi effettiva, riavvia il container in esecuzione con AlloyDB Omni:

    Docker

          sudo docker restart CONTAINER_NAME
          

    Podman

          sudo podman restart CONTAINER_NAME
          

Verificare la configurazione della cache su disco

Dopo aver abilitato la cache del disco AlloyDB Omni, verifica che la cache del disco venga utilizzata monitorando l'attività di lettura e scrittura sui dischi utilizzando utilità come iotop o iostat.

Inoltre, puoi controllare se la cache del disco di AlloyDB Omni è aperta.

Per verificare la configurazione della cache del disco per AlloyDB Omni in un container, segui questi passaggi:

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"

Se la memorizzazione nella cache del disco è configurata correttamente, nei log viene visualizzato il messaggio `Successfully opened omni disk cache ... `.

Passaggi successivi