Questo documento descrive come migliorare le prestazioni del piano di query utilizzando la gestione dei piani di query in AlloyDB per PostgreSQL. La gestione del piano 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 economico, con conseguente miglioramento delle prestazioni 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 quello più conveniente.
Una modifica dei parametri potrebbe comportare una modifica del piano. Anche se il piano selezionato è in genere l'opzione più conveniente, potrebbero esserci casi in cui viene scelto un piano meno conveniente, il che comporta un rendimento scadente delle 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 informate.
I due componenti principali della gestione dei piani di esecuzione delle 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 del tuo database. Il repository dei piani di query fornisce l'osservabilità delle prestazioni 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 del piano di query monitora questi piani approvati e garantisce che, quando la query viene eseguita successivamente, 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.enabledsuon. Per saperne di più, consulta Configura i flag di database. - Crea l'estensione
google_plan_managementsul database. Per ulteriori informazioni, vedi Attivare un'estensione. Concedi
google_plan_management_roleagli utenti del database che vogliono utilizzare la gestione del piano di query e gestire i piani di query.Nella console Google Cloud , vai alla pagina Cluster di AlloyDB.
Fai clic sull'istanza richiesta.
Fai clic su AlloyDB Studio, quindi sulla scheda Editor 1.
Inserisci la seguente query:
GRANT google_plan_management_role TO DATABASE_USER;Sostituisci
DATABASE_USERcon l'utente a cui vuoi concedere il ruolo.Fai clic su Esegui.
Visualizzare i piani di query monitorati
La gestione del piano di query fornisce una visualizzazione del piano 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 dallo strumento di ottimizzazione 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 alla 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 del piano di query
Se non vuoi che la gestione dei piani di query monitori i piani di query generati
dall'ottimizzatore, devi disattivare il flag del database
google_plan_management.enable_track_plans. Questo flag è attivo
per impostazione predefinita e ti consigliamo di lasciarlo attivo. Per saperne di più, consulta Configura i flag di database.
Visualizza i piani gestiti
Puoi visualizzare tutte le query e tutti i piani gestiti dalla gestione dei piani di query, inclusi i piani approvati e rifiutati.
Per visualizzare i piani gestiti, esegui questa query:
SELECT * FROM google_plan_management.managed_plans_view;
La risposta alla 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 del piano, puoi utilizzare la gestione del piano 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:
Visualizza i piani monitorati che l'ottimizzatore ha generato e identifica
logical_query_idnella risposta.Esamina tutti i piani generati per
logical_query_id. Puoi calcolare il tempo di esecuzione medio per ogni piano utilizzando i valoritotal_execution_timeenum_executions, quindi decidere il piano migliore per la tua query.La colonna
planinclude altri dettagli, come l'indice utilizzato o il metodo di ordinamento utilizzato, che possono aiutarti a decidere un piano di query.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'logical_query_idunivoca per la query. Ogni ID query può essere associato a più ID piano.PLAN_ID: l'plan_idunivoco per la query.
Rifiutare un piano
Puoi rifiutare qualsiasi piano approvato per una query e impedire alla gestione del piano di query di applicare il piano alla query. I piani rifiutati non vengono eliminati e sono disponibili nell'elenco dei piani monitorati.
Per negare 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 del database google_plan_management.enable_steer_plans.
Questo flag è attivo per impostazione predefinita. Per saperne di più, consulta Configura i flag del database.
Limitazioni
- Non puoi utilizzare la gestione dei piani di query in tabelle partizionate o set di raggruppamento.
- La gestione del piano di query è supportata solo sull'istanza principale.
- Il repository dei piani di query può archiviare fino a 100.000 piani unici e non fornisce una policy di conservazione.
Passaggi successivi
- Scopri di più sul motore columnstore di AlloyDB per PostgreSQL
- Utilizzare Index Advisor con Query Insights