

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

# Gestione del piano di query di Aurora PostgreSQL
<a name="AuroraPostgreSQL.Optimize.Start"></a>

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\$1plan\$1mgmt.dba\$1plans per Aurora edizione compatibile con PostgreSQL](AuroraPostgreSQL.Optimize.dba_plans_view_Reference.md). 

## Normalizzazione e l'hash SQL
<a name="AuroraPostgreSQL.Optimize.Start.hash-and-normalization"></a>

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

La gestione del piano di query normalizza questa istruzione come mostrato:

```
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](AuroraPostgreSQL.Optimize.UsePlans.md). 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 informazioni dettagliate, vedi [Analisi del piano scelto dall'ottimizzatore](AuroraPostgreSQL.Optimize.UsePlans.md#AuroraPostgreSQL.Optimize.UsePlans.AnalyzePlans). Per un'immagine che illustra il processo di scelta di un piano, consultare [In che modo l'ottimizzatore sceglie quale piano eseguire.](AuroraPostgreSQL.Optimize.UsePlans.md#AuroraPostgreSQL.Optimize.UsePlans.ChoosePlans). 