Mantenere aggiornati i dati del magazzino delle colonne in memoria

Seleziona una versione della documentazione:

Questa pagina descrive come mantenere aggiornati i dati nell'archivio colonne del motore colonnare in AlloyDB Omni utilizzando l'orchestratore RPM.

Quando le righe della tabella vengono aggiunte, eliminate o aggiornate, il motore colonnare non aggiorna immediatamente i dati nell'archivio colonne. Al contrario, contrassegna i contenuti interessati nell'archivio colonne come non validi e le query vengono pianificate ed eseguite utilizzando sia i dati orientati alle colonne dell'archivio colonne sia i dati orientati alle righe della cache delle righe e dell'archiviazione del database.

Nel corso del tempo, man mano che sempre più blocchi di dati diventano non validi, i miglioramenti delle prestazioni delle query forniti dal motore colonnare vengono ridotti al punto in cui i dati colonnari devono essere aggiornati per recuperare i miglioramenti delle prestazioni delle query. Quando viene raggiunta questa soglia di aggiornamento, il motore colonnare utilizza un job in background per aggiornare i dati non validi nell'archivio colonne. Per impostazione predefinita, il motore colonnare utilizza una soglia di aggiornamento di 50, il che indica che i contenuti specifici nell'archivio colonne vengono contrassegnati per l'aggiornamento quando il 50% dei contenuti è diventato non valido. Puoi modificare questa soglia di aggiornamento per regolare l'overhead dell'aggiornamento automatico e potenzialmente ottenere prestazioni delle query migliori e continue per il carico di lavoro dell'applicazione.

Inoltre, puoi aggiornare manualmente le tabelle e gli indici ScaNN caricati nel motore colonnare in qualsiasi momento. In genere, esegui un aggiornamento manuale quando vuoi che le modifiche apportate a una tabella vengano applicate all'archivio colonne il prima possibile dopo averle apportate.

Controllare la percentuale di dati non validi

Quando l'applicazione aggiunge, elimina o aggiorna le righe di una tabella, il motore colonnare contrassegna i dati interessati nell'archivio colonne come non validi. Puoi controllare la percentuale di dati non validi per le tabelle e le viste materializzate eseguendo una query sulla vista g_columnar_relations. In questo modo, puoi decidere se eseguire un aggiornamento manuale o modificare la soglia di aggiornamento automatico.

Per visualizzare la percentuale di invalidazione per tutte le relazioni nell'archivio colonnare, esegui la query seguente:

SELECT relation_name, invalid_percentage FROM g_columnar_relations;

Per controllare la percentuale di invalidazione per una tabella specifica, aggiungi una clausola WHERE alla query.

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

Sostituisci TABLE_NAME con una stringa contenente il nome della tabella o della vista materializzata. Se la risorsa si trova in uno schema diverso da public, specifica il nome dello schema utilizzando il formato SCHEMA_NAME.TABLE_NAME, ad esempio myschema.mytable.

Per controllare la percentuale di invalidazione per un indice specifico, aggiungi una clausola WHERE alla query.

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

Modificare la soglia di aggiornamento del motore colonnare

Per modificare la soglia di aggiornamento del motore colonnare:

  1. Apri il manifest del cluster di database DBCluster.

  2. Nella sezione primarySpec, aggiungi il parametro google_columnar_engine.refresh_threshold_percentage al blocco parameters:

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

    Sostituisci quanto segue:

    • DB_CLUSTER_NAME: il nome del cluster di database.
    • THRESHOLD: un valore intero compreso tra 1 e 100. Questo valore specifica la percentuale di blocchi di dati nei contenuti che devono diventare non validi affinché i contenuti vengano contrassegnati per l'aggiornamento.
  3. L'orchestratore RPM riavvia automaticamente il database per applicare le modifiche ai parametri. Applica il manifest DBCluster aggiornato utilizzando uno dei seguenti metodi:

    alloydbctl

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

    Sostituisci quanto segue:

    • DEPLOYMENT_SPEC_PATH: il percorso della directory delle specifiche di deployment.
    • DBCLUSTER_SPECIFICATION: il percorso del manifest DBCluster che hai modificato.

    Ansible

    1. Crea un file playbook update.yml:

      ---
      - 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
      

      Sostituisci quanto segue:

      • SSH_USER: il nome utente che utilizzi per connetterti ai nodi del cluster utilizzando SSH.
      • SSH_KEY_PATH: il percorso locale del file di chiave privata SSH utilizzato per connetterti ai nodi.
    2. Esegui il playbook dal nodo di controllo, passando la specifica della risorsa come variabile extra:

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

      Sostituisci quanto segue:

      • DEPLOYMENT_SPEC_PATH: il percorso della directory delle specifiche di deployment.
      • DBCLUSTER_SPECIFICATION: il percorso del manifest DBCluster che hai modificato.

Aggiornare manualmente le tabelle e gli indici vettoriali nell'archivio colonne

Puoi aggiornare manualmente le tabelle e gli indici vettoriali nel motore colonnare in qualsiasi momento utilizzando le funzioni SQL dedicate. I tipi di indice supportati sono ScaNN e HNSW.

Per aggiornare i dati di una tabella nel motore colonnare, esegui la funzione google_columnar_engine_refresh.

SELECT google_columnar_engine_refresh(TABLE_NAME);

Sostituisci TABLE_NAME con una stringa contenente il nome della tabella o della vista materializzata. Se la risorsa si trova in uno schema diverso da public, specifica il nome dello schema utilizzando il formato SCHEMA_NAME.TABLE_NAME, ad esempio myschema.mytable.

Allo stesso modo, per aggiornare manualmente un indice vettoriale nel motore colonnare, esegui la funzione google_columnar_engine_refresh_index.

SELECT google_columnar_engine_refresh_index(index => INDEX_NAME);

Sostituisci INDEX_NAME con una stringa contenente il nome dell'indice da aggiornare.