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.enabledsuon. Per saperne di più, consulta Configurare i flag del database. - Crea l'estensione
google_plan_managementnel database. Per saperne di più, consulta Abilitare un' estensione. Concedi il ruolo
google_plan_management_roleagli utenti del database che vogliono utilizzare la gestione dei piani di query e gestire i piani di query.Nella Google Cloud console, 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 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:
Visualizza i piani monitorati generati dall' ottimizzatore e identifica il
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'elementological_query_idunivoco per la query. Ogni ID query potrebbe essere associato a più ID piano.PLAN_ID: l'elementoplan_idunivoco 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.