Configurare il motore colonnare in AlloyDB Omni

Seleziona una versione della documentazione:

In questa pagina viene descritto come attivare o disattivare il motore colonnare su un cluster di database AlloyDB Omni. Inoltre, spiega come configurare una dimensione iniziale appropriata per l'archivio di colonne.

Per una panoramica concettuale del motore colonnare AlloyDB, consulta la panoramica del motore colonnare AlloyDB Omni.

Abilita il motore colonnare

Per utilizzare il motore colonnare su un'istanza, imposta il flag google_columnar_engine.enabled dell'istanza su on.

Server singolo

Per impostare google_columnar_engine.enabled su on, segui questi passaggi:

  1. Esegui il comando PostgreSQL ALTER SYSTEM:

    ALTER SYSTEM SET google_columnar_engine.enabled = 'on'
    
  2. Se vuoi modificare la configurazione del motore colonnare, segui le istruzioni riportate nella sezione successiva prima di riavviare il server del database. In caso contrario, completa il passaggio seguente per riavviare il server del database ora.

  3. Affinché la modifica dei parametri di configurazione diventi effettiva, riavvia il container in esecuzione con AlloyDB Omni.

    Docker

      sudo docker restart CONTAINER_NAME

    Podman

      sudo podman restart CONTAINER_NAME

Configura le dimensioni del datastore di colonne

Quando il motore colonnare è abilitato su un'istanza, AlloyDB Omni alloca una parte della memoria dell'istanza per archiviare i dati colonnari. Se dedichi RAM ad alta velocità allo spazio di archiviazione a colonne, AlloyDB Omni può accedere ai dati colonnari il più rapidamente possibile.

La memoria e la cache di archiviazione insieme rappresentano la capacità complessiva del motore colonnare.

Configura la memoria

Puoi impostare l'allocazione su una dimensione fissa utilizzando il flag google_columnar_engine.memory_size_in_mb.

Server singolo

Per impostare il flag google_columnar_engine.memory_size_in_mb su un'istanza, segui questi passaggi:

  1. Configura la memoria eseguendo il comando PostgreSQL ALTER SYSTEM:

    ALTER SYSTEM SET google_columnar_engine.memory_size_in_mb = COLUMN_MEMORY_SIZE;
    

    Sostituisci COLUMN_MEMORY_SIZE con la nuova dimensione dello spazio di archiviazione delle colonne, in megabyte, ad esempio 256.

  2. Affinché la modifica dei parametri di configurazione diventi effettiva, riavvia il container in esecuzione con AlloyDB Omni.

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

Configura la cache di archiviazione

Server singolo

Puoi configurare la cache di archiviazione del motore colonnare su dispositivi dedicati o condivisi.

Dispositivi dedicati

Sui dispositivi dedicati, per attivare la cache di archiviazione del motore colonnare di AlloyDB Omni per un container single-server, devi eseguire il provisioning dei dischi e creare un file system, quindi montare la directory della cache all'interno di AlloyDB Omni e infine attivare la cache di archiviazione colonnare.

Esegui il provisioning dei dischi e crea un file system

Per eseguire il provisioning dei dischi e creare un file system per la cache di archiviazione del motore colonnare 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 passaggi seguenti mostrano come utilizzare lvm e ext4 su un'istanza Ubuntu Compute Engine utilizzando 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 (Non-Volatile 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 dall'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_COLUMNAR_STORAGE_CACHE_DIRECTORY
    sudo mount /dev/VOLUME_GROUP/LOGICAL_VOLUME /OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY

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

Monta la directory della cache di archiviazione colonnare all'interno di AlloyDB Omni

Prima di abilitare 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 Personalizza l'installazione di AlloyDB Omni.

Per montare OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY all'interno del container Docker che esegue AlloyDB Omni, utilizza il seguente 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_COLUMNAR_STORAGE_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d google/alloydbomni

Sostituisci quanto segue:

  • CONTAINER_NAME: il nome da assegnare al nuovo contenitore 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 sua directory di dati.
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: la directory della cache all'interno del container AlloyDB Omni che mappa 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_COLUMNAR_STORAGE_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_COLUMNAR_STORAGE_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d docker.io/google/alloydbomni

Sostituisci quanto segue:

  • CONTAINER_NAME: il nome da assegnare al nuovo contenitore 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 mappa al punto di montaggio sulla macchina host, ad esempio, in base al valore della directory della cache all'interno del container, /omni_columnar_storage_cache_directory, simile a OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY o /disk/cache/inside/container.

Per concedere le autorizzazioni di accesso completo alla directory OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY montata, 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
  

Abilita la cache di archiviazione colonnare di AlloyDB Omni per AlloyDB Omni in esecuzione in un container

Per abilitare la cache di archiviazione colonnare di AlloyDB Omni su dispositivi dedicati 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. Imposta la directory della cache di archiviazione colonnare:

    ALTER SYSTEM SET google_columnar_engine.omni_storage_cache_directory = OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY;
    

    Sostituisci OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY con il percorso assoluto della directory dedicata in cui vuoi che AlloyDB Omni archivi i file della cache di archiviazione del motore colonnare. Assicurati che questa directory esista e disponga delle autorizzazioni in scrittura appropriate per l'utente del database.

  2. Configura le dimensioni della cache di archiviazione:

    ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;
    

    Sostituisci STORAGE_CACHE_SIZE con la dimensione della cache di archiviazione colonnare che preferisci, in megabyte. Per impostazione predefinita, l'intera dimensione del dispositivo dedicato viene allocata al motore colonnare, senza influire sulla cache del disco. Il valore massimo consentito per questo flag è 1000 * google_columnar_engine.memory_size_in_mb, a seconda di quale sia il valore minimo.

  3. Affinché la modifica dei parametri di configurazione diventi effettiva, riavvia il container in esecuzione con AlloyDB Omni.

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

Dispositivi condivisi

Prima di configurare la cache di archiviazione colonnare per i dispositivi condivisi con la cache del disco, devi attivare la cache del disco di AlloyDB Omni.

Configura la cache di archiviazione sui dispositivi condivisi nel seguente modo:

  1. Configura la cache di archiviazione:

    ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;
    

    Sostituisci STORAGE_CACHE_SIZE con le dimensioni della cache di archiviazione che preferisci, in megabyte. Per impostazione predefinita, il 5% della cache del disco è allocato al motore colonnare. Il valore massimo consentito per questo flag è il 50% della cache del disco totale o 1000 * google_columnar_engine.memory_size_in_mb, a seconda di quale sia il valore minimo.

  2. Affinché la modifica dei parametri di configurazione diventi effettiva, riavvia il container in esecuzione con AlloyDB Omni.

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

Abilita join vettorizzato

Il motore colonnare dispone di una funzionalità di join vettorizzato che può migliorare le prestazioni dei join applicando l'elaborazione vettorizzata alle query idonee.

Dopo aver attivato il join vettorizzato, il planner delle query di AlloyDB ha la possibilità di applicare l'operatore di join vettorizzato anziché l'operatore di join hash PostgreSQL standard. Il planner prende questa decisione confrontando il costo di esecuzione della query utilizzando ciascun metodo.

Per abilitare il join vettorizzato su un'istanza, imposta il flag google_columnar_engine.enable_vectorized_join dell'istanza su on.

Per impostare questo flag su un'istanza, esegui il comando PostgreSQL ALTER SYSTEM:

ALTER SYSTEM SET google_columnar_engine.enable_vectorized_join = 'on';

Per impostazione predefinita, AlloyDB Omni alloca un thread alla funzionalità di join vettorizzato. Puoi aumentare il numero di thread disponibili per questa funzionalità impostando il flag google_columnar_engine.vectorized_join_threads su un valore più alto. Il valore massimo è cpu_count * 2.

Aggiorna manualmente il motore colonnare

Per impostazione predefinita, quando il motore colonnare è abilitato, aggiorna l'archivio di colonne in background.

Per aggiornare manualmente il motore di colonne, esegui questa query SQL:

SELECT google_columnar_engine_refresh(relation =>'TABLE_NAME');

Sostituisci TABLE_NAME con il nome della tabella o della vista materializzata che vuoi aggiornare manualmente.

Disabilita il motore colonnare

Per disattivare il motore colonnare su un'istanza, imposta il flag google_columnar_engine.enabled su off.

Server singolo

Per impostare google_columnar_engine.enabled su off, segui questi passaggi:

  1. Esegui il comando PostgreSQL ALTER SYSTEM:
ALTER SYSTEM SET google_columnar_engine.enabled = 'off'
  1. Affinché la modifica dei parametri di configurazione diventi effettiva, riavvia il container in esecuzione con AlloyDB Omni.

Docker

Per riavviare un container AlloyDB Omni, esegui il comando docker container restart:

  sudo docker restart CONTAINER_NAME

Sostituisci CONTAINER_NAME con il nome che hai assegnato al container AlloyDB Omni durante l'installazione.

Podman

Per riavviare un container AlloyDB Omni, esegui il comando podman container start:

  sudo podman restart CONTAINER_NAME

Sostituisci CONTAINER_NAME con il nome che hai assegnato al container AlloyDB Omni durante l'installazione.

Risolvi i problemi relativi al motore colonnare

Correggi l'errore insufficient shared memory

Se esegui AlloyDB Omni senza memoria condivisa sufficiente per l'utilizzo del motore colonnare, potresti visualizzare questo errore:

Insufficient shared memory for generating the columnar formats.

Puoi risolvere questo problema specificando la quantità di memoria condivisa disponibile per il container AlloyDB Omni. La modalità di esecuzione di questa operazione varia a seconda del sistema operativo host.

Linux

Aumenta le dimensioni della partizione /dev/shm della macchina host utilizzando una tecnica come la modifica del file /etc/fstab.

macOS

Installa un nuovo container AlloyDB Omni, specificando un valore di memoria condivisa più grande per il flag --shm-size.

Correggi le colonne non compilate

Se le colonne non vengono compilate nel motore colonnare, potrebbe essere vera una delle seguenti condizioni:

  • Le colonne che vuoi aggiungere includono un tipo di dati non supportato.

  • I requisiti del motore colonnare non sono soddisfatti.

Per risolvere il problema, prova quanto segue:

  • Verifica che le tabelle o le viste materializzate nella query si trovino nel motore colonnare.
  • Verifica l'utilizzo del motore colonnare utilizzando l'istruzione EXPLAIN.

Passaggi successivi