Comprensione della gestione del piano di query per Aurora PostgreSQL - Amazon Aurora

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Comprensione della gestione del piano di query per Aurora PostgreSQL

Con la gestione del piano di query attivata per il cluster database Aurora PostgreSQL, l'ottimizzatore genera e archivia i piani di esecuzione delle query per qualsiasi istruzione SQL che viene elaborata più di una volta. L'ottimizzatore imposta sempre lo stato del primo piano generato dell'istruzione gestita su dba_plans e lo archivia nella vista Approved.

Il set di piani approvati salvati per un'istruzione gestita è noto come baseline del piano. Mentre l'applicazione è in corso, l'ottimizzatore potrebbe generare piani aggiuntivi per le istruzioni gestite. L'ottimizzatore imposta i piani acquisiti aggiuntivi su uno stato di Unapproved.

In seguito, si può decidere se i piani Unapproved vengono eseguiti correttamente e cambiarli in Approved, Rejected o Preferred. A tale scopo, si utilizza la funzione apg_plan_mgmt.evolve_plan_baselines o la funzione apg_plan_mgmt.set_plan_status.

Quando l'ottimizzatore genera un piano per un'istruzione SQL, la gestione del piano di query salva il piano nella tabella apg_plan_mgmt.plans. Gli utenti del database cui è stato concesso il ruolo apg_plan_mgmt possono visualizzare i dettagli del piano eseguendo una query sulla vista apg_plan_mgmt.dba_plans. Ad esempio, nella seguente query vengono elencati i dettagli dei piani attualmente nella vista per un cluster database Aurora PostgreSQL non di produzione.

  • sql_hash: un identificatore per l'istruzione SQL che è il valore hash per il testo normalizzato dell'istruzione SQL.

  • plan_hash: un identificatore univoco per il piano che è una combinazione di sql_hash e di un hash del piano.

  • status: lo stato del piano. L'ottimizzatore può eseguire un piano approvato.

  • enabled: indica se il piano è pronto per l'uso (true) o no (false).

  • plan_outline: una rappresentazione del piano che viene utilizzata per ricreare il piano di esecuzione effettivo. Gli operatori nella struttura ad albero vengono mappati agli operatori nell'output EXPLAIN.

La vista apg_plan_mgmt.dba_plans contiene molte altre colonne contenenti tutti i dettagli del piano, ad esempio la data dell'ultimo utilizzo del piano. Per tutti i dettagli completi, consultare Riferimento per la visualizzazione apg_plan_mgmt.dba_plans.

Normalizzazione e l'hash SQL

Nella vista apg_plan_mgmt.dba_plans, è possibile identificare un'istruzione gestita in base al suo valore hash SQL. L'hash SQL viene calcolato su una rappresentazione normalizzata dell'istruzione SQL che rimuove alcune differenze, ad esempio i valori letterali.

Il processo di normalizzazione per ogni istruzione SQL consente di conservare spazio e maiuscole/minuscole, in modo da poter leggere e comprendere l'essenza dell'istruzione SQL. La normalizzazione rimuove o sostituisce i seguenti elementi.

  • Commenti di blocco iniziali

  • La parola chiave EXPLAIN e le opzioni EXPLAIN ed EXPLAIN ANALYZE

  • Spazi finali

  • Tutti i letterali

Ad esempio, considerare la seguente istruzione.

/*Leading comment*/ EXPLAIN SELECT /* Query 1 */ * FROM t WHERE x > 7 AND y = 1;

L'ottimizzatore normalizza questa istruzione come mostrato di seguito.

SELECT /* Query 1 */ * FROM t WHERE x > CONST AND y = CONST;

La normalizzazione consente di utilizzare lo stesso hash SQL per istruzioni SQL simili che potrebbero differire solo nei loro valori letterali o dei parametri. In altre parole, possono esistere più piani per lo stesso hash SQL, con un piano diverso ottimale in condizioni diverse.

Nota

Una singola istruzione SQL utilizzata con schemi diversi dispone di piani diversi perché è associata allo schema specifico in fase di runtime. Il planner utilizza le statistiche per l'associazione dello schema per scegliere il piano ottimale.

Per ulteriori informazioni su come l'ottimizzatore sceglie un piano, consultare Utilizzo dei piani gestiti per Aurora PostgreSQL. In questa sezione vengono fornite informazioni su come utilizzare EXPLAIN e EXPLAIN ANALYZE per visualizzare l'anteprima di un piano prima che venga effettivamente utilizzato. Per dettagli, consulta Analisi del piano scelto dall'ottimizzatore. Per un'immagine che illustra il processo di scelta di un piano, consultare In che modo l'ottimizzatore sceglie quale piano eseguire..