Gestire i piani di query

Questo documento descrive come migliorare il rendimento del piano di query utilizzando la gestione dei piani di query in AlloyDB per PostgreSQL. La gestione dei piani di query monitora continuamente tutti i piani di query e le relative statistiche di esecuzione nel database. Dopo aver esaminato le query e i costi associati, puoi approvare un piano, che viene applicato in modo coerente per una determinata query. Questo approccio garantisce la selezione di un piano di query efficiente in termini di costi, con conseguente miglioramento del rendimento delle query.

Come funziona

In PostgreSQL, un ottimizzatore di query seleziona un piano di esecuzione per ogni query in base ai costi stimati. Molti fattori influenzano il costo della query, ad esempio i parametri della query, la complessità della query, le dimensioni della tabella, gli indici disponibili e le risorse di sistema.

Poiché parametri di ricerca potrebbero cambiare a ogni esecuzione della query, la selezione dinamica di un piano di query potrebbe non produrre sempre risultati ottimali. Durante l'elaborazione di una query, l'ottimizzatore valuta vari piani di esecuzione e tenta di scegliere il piano più conveniente.

Una modifica dei parametri potrebbe comportare una modifica del piano. Sebbene il piano selezionato sia in genere l'opzione più conveniente, potrebbero verificarsi casi in cui viene scelto un piano meno conveniente, con conseguente scarso rendimento della query. La gestione dei piani di query ti aiuta a comprendere i pattern e i piani prodotti dall'ottimizzatore e ti consente di visualizzare ogni piano per prendere decisioni consapevoli.

I due componenti principali della gestione dei piani di query sono i seguenti:

Repository dei piani di query
Quando abiliti la gestione dei piani di query per il tuo database, il repository dei piani inizia a monitorare i piani storici e le statistiche di esecuzione nel database. Il repository dei piani di query fornisce osservabilità sul rendimento del piano di query.
Gestione dei piani
Dopo aver esaminato i piani disponibili, il componente di gestione dei piani ti consente di approvare uno o più piani per un modello di query specifico. La gestione dei piani di query tiene traccia di questi piani approvati e garantisce che, quando la query viene eseguita in un secondo momento, l'ottimizzatore di query utilizzi solo uno dei piani approvati. Se vengono approvati più piani, AlloyDB seleziona ed esegue il piano con il costo stimato più basso.

Prima di iniziare

  • Imposta il flag di database google_plan_management.enabled su on. Per saperne di più, consulta Configurare i flag del database.
  • Crea l'estensione google_plan_management nel database. Per saperne di più, consulta Abilitare un' estensione.
  • Concedi il ruolo google_plan_management_role agli utenti del database che vogliono utilizzare la gestione dei piani di query e gestire i piani di query.

    1. Nella Google Cloud console, vai alla pagina Cluster di AlloyDB.

      Vai a Cluster

    2. Fai clic sull'istanza richiesta.

    3. Fai clic su AlloyDB Studio, quindi sulla scheda Editor 1.

    4. Inserisci la seguente query:

      GRANT google_plan_management_role TO DATABASE_USER;
      

      Sostituisci DATABASE_USER con l'utente a cui vuoi concedere il ruolo.

    5. Fai clic su Esegui.

Visualizzare i piani di query monitorati

La gestione dei piani di query fornisce una visualizzazione dei piani di query che mostra tutti i piani di query monitorati, i relativi tempi di esecuzione e altre informazioni. Un piano di query monitorato è un piano di query generato dall'ottimizzatore e archiviato nel repository dei piani.

Per visualizzare i piani monitorati storici, esegui la seguente query:

SELECT * FROM google_plan_management.tracked_plans_view;

La risposta della query è simile alla seguente:

db_id                | 5
db_name              | postgres
user_id              | 16392
user_name            | postgres
logical_query_id     | 15480571796188147798
plan_id              | 4740866759615354783
query                | SELECT c1, c2, c3 FROM t1 WHERE c1 = 1;
plan                 | Seq Scan on public.t1                                                                                                                                                            +
                     |   Output: c1, c2, c3                                                                                                                                                             +
                     |   Filter: (t1.c1 = ?)
total_execution_time | 0.003937501
num_executions       | 1
creation_time        | 2024-11-06 16:52:25.200737+00
last_used_time       | 2024-11-06 16:52:25.200737+00

Disattivare il monitoraggio dei piani di query

Se non vuoi che la gestione del piano di query monitori i piani di query generati dall'ottimizzatore, devi disattivare il flag di database google_plan_management.enable_track_plans. Questo flag è attivo per impostazione predefinita e ti consigliamo di lasciarlo attivo. Per saperne di più, consulta Configurare i flag del database.

Visualizzare i piani gestiti

Puoi visualizzare tutte le query e i piani gestiti dalla gestione dei piani di query, inclusi i piani approvati e rifiutati.

Per visualizzare i piani gestiti, esegui la seguente query:

SELECT * FROM google_plan_management.managed_plans_view;

La risposta della query è simile alla seguente:

db_id            | 5
db_name          | postgres
user_id          | 16392
user_name        | postgres
logical_query_id | 15480571796188147798
plan_id          | 4740866759615354783
status           | approved

Approvare un piano

L'ottimizzatore seleziona un piano di query in modo dinamico, il che significa che potrebbe scegliere piani di query diversi per la stessa query in momenti diversi. Per applicare una selezione coerente dei piani, puoi utilizzare la gestione dei piani di query per approvare uno o più piani di query per una determinata query.

Se approvi più piani, la gestione dei piani di query confronta tutti i piani approvati e seleziona il piano più conveniente per l'esecuzione della query.

Per valutare e approvare un piano per una query:

  1. Visualizza i piani monitorati generati dall' ottimizzatore e identifica il logical_query_id nella risposta.

  2. Esamina tutti i piani generati per logical_query_id. Puoi calcolare il tempo di esecuzione medio per ogni piano utilizzando i valori total_execution_time e num_executions, quindi decidere il piano migliore per la tua query.

    La colonna plan include altri dettagli, come l'indice utilizzato o il metodo di ordinamento utilizzato, che possono aiutarti a decidere un piano di query.

  3. Approva il piano che vuoi applicare alla query eseguendo la seguente query:

      SELECT google_plan_management.approve_plan(QUERY_ID, PLAN_ID);
    

    Sostituisci quanto segue:

    • QUERY_ID: l'elemento logical_query_id univoco per la query. Ogni ID query potrebbe essere associato a più ID piano.
    • PLAN_ID: l'elemento plan_id univoco per la query.

Rifiutare un piano

Puoi rifiutare qualsiasi piano approvato per una query e impedire alla gestione dei piani di query di applicare il piano alla query. I piani rifiutati non vengono eliminati e sono disponibili nell'elenco dei piani monitorati.

Per rifiutare un piano approvato, esegui la seguente query:

    SELECT google_plan_management.deny_plan(QUERY_ID, PLAN_ID);

Eliminare un piano approvato

Puoi eliminare un piano approvato dal repository dei piani. Quando elimini un piano approvato, questo non viene più visualizzato nell'elenco dei piani gestiti.

Per eliminare un piano approvato, esegui la seguente query:

    SELECT google_plan_management.update_plan_status(QUERY_ID, PLAN_ID, 'delete');

Interrompere temporaneamente l'utilizzo dei piani approvati

Se vuoi interrompere temporaneamente l'utilizzo dei piani approvati per le tue query, devi disattivare il flag di database google_plan_management.enable_steer_plans. Questo flag è attivo per impostazione predefinita. Per saperne di più, consulta Configurare i flag del database.

Limitazioni

  • Non puoi utilizzare la gestione dei piani di query in tabelle partizionate o set di raggruppamento.
  • La gestione dei piani di query è supportata solo nell'istanza principale.
  • Il repository dei piani di query può archiviare fino a 100.000 piani univoci e non fornisce una norma di conservazione.

Passaggi successivi