

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

# Query parallela per Amazon Aurora MySQL
<a name="aurora-mysql-parallel-query"></a><a name="parallel_query"></a><a name="pq"></a>

Questo argomento illustra l'ottimizzazione delle prestazioni mediante query parallele per Amazon Aurora edizione compatibile con MySQL. Questa funzionalità utilizza un percorso di elaborazione speciale per alcune query che implicano grandi quantità di dati grazie all'architettura di storage condivisa di Aurora. Le query in parallelo forniscono i migliori risultati con cluster di database Aurora MySQL che includono tabelle con milioni di righe e query analitiche la cui elaborazione dura vari minuti o addirittura ore. 

**Topics**
+ [Panoramica delle query in parallelo per Aurora MySQL](#aurora-mysql-parallel-query-overview)
+ [Creazione di un cluster di database per query in parallelo in Aurora MySQL](aurora-mysql-parallel-query-creating-cluster.md)
+ [Attivazione e disattivazione di query in parallelo in Aurora MySQL](aurora-mysql-parallel-query-enabling.md)
+ [Ottimizzazione delle query in parallelo in Aurora MySQL](aurora-mysql-parallel-query-optimizing.md)
+ [Identificazione delle istruzioni che utilizzano la funzione di query in parallelo per Aurora MySQL](aurora-mysql-parallel-query-verifying.md)
+ [Monitoraggio di query in parallelo per Aurora MySQL](aurora-mysql-parallel-query-monitoring.md)
+ [Costrutti SQL per query in parallelo in Aurora MySQL](aurora-mysql-parallel-query-sql.md)

## Panoramica delle query in parallelo per Aurora MySQL
<a name="aurora-mysql-parallel-query-overview"></a>

 La query parallela Aurora MySQL è un'ottimizzazione che parallelizza parte del calcolo coinvolto nell'elaborazione di query a uso intensivo di dati I/O . Il lavoro che viene parallelizzato include il recupero di righe dalla memoria, l'estrazione dei valori della colonna e la determinazione di quali righe corrispondono alle condizioni nelle clausole join e nella clausola `WHERE`. Questa attività che implicano grandi quantità di dati sono delegate (in termini di ottimizzazione del database, *trasferite*) a più nodi nel livello di storage distribuito di Aurora. Senza query parallela, ogni query porta tutti i dati scansionati a un singolo nodo all'interno del cluster Aurora MySQL (il nodo head) ed esegue l'elaborazione in quel nodo. 

**Suggerimento**  
Anche il motore di database PostgreSQL ha una funzionalità chiamata "query parallela". Tale caratteristica non è correlata alla query Aurora parallela.

 Quando la funzionalità di query in parallelo è abilitata, il motore Aurora MySQL determina automaticamente quando utilizzarla senza richiedere modifiche SQL come hint o attributi di tabella. Nelle sezioni seguenti, viene descritto quando una query in parallelo è applicata a una query. Scoprirai inoltre come assicurarti che una query in parallelo sia applicata dove necessario. 

**Nota**  
 L'ottimizzazione delle query parallele offre il massimo vantaggio per le query a esecuzione prolungata che richiedono minuti o ore per il completamento. Aurora MySQL generalmente non esegue l'ottimizzazione delle query parallele per query economiche. In genere, inoltre, non esegue l'ottimizzazione delle query parallele se un'altra tecnica di ottimizzazione ha più senso, come la memorizzazione nella cache delle query, la memorizzazione nella cache del pool di buffer o le ricerche degli indici. Consulta se ritieni che le query in parallelo non sono utilizzate dove dovrebber [Identificazione delle istruzioni che utilizzano la funzione di query in parallelo per Aurora MySQL](aurora-mysql-parallel-query-verifying.md). 

**Topics**
+ [Vantaggi](#aurora-mysql-parallel-query-benefits)
+ [Architecture](#aurora-mysql-parallel-query-architecture)
+ [Prerequisiti](#aurora-mysql-parallel-query-prereqs)
+ [Limitazioni](#aurora-mysql-parallel-query-limitations)
+ [Costi di I/O con la query parallela](#aurora-mysql-parallel-query-cost)

### Vantaggi
<a name="aurora-mysql-parallel-query-benefits"></a>

 Con la query parallela è possibile eseguire query analitiche a uso intensivo di dati sulle tabelle Aurora MySQL. In molti casi, è possibile ottenere un miglioramento order-of-magnitude delle prestazioni rispetto alla tradizionale divisione del lavoro per l'elaborazione delle query. 

 Alcuni dei vantaggi derivanti dall'uso delle query in parallelo sono: 
+  I/O Prestazioni migliorate, grazie alla parallelizzazione delle richieste di lettura fisiche su più nodi di storage. 
+  Traffico di rete ridotto. Aurora non trasmette intere pagine di dati dai nodi di storage al nodo head e quindi non filtra le righe e le colonne superflue in seguito. Aurora trasmette invece tuple compatte contenenti solo i valori di colonna necessari per il set di risultati. 
+  Riduzione dell'utilizzo della CPU sul nodo head grazie dell'elaborazione della funzione di trasferimento, al filtraggio delle righe e alla proiezione delle colonne per la clausola `WHERE`. 
+  Riduzione della sollecitazione della memoria a livello del pool di buffer. Le pagine elaborate dalla query parallela non vengono aggiunte al pool di buffer. Questo approccio riduce la possibilità che una scansione intensiva di dati sgomberi i dati utilizzati di frequente dal pool di buffer. 
+  Riduzione potenziale della duplicazione dei dati nella pipeline ETL (extract, transform, load), rendendo più pratica l'esecuzione di query analitiche di lunga durata su dati esistenti. 

### Architecture
<a name="aurora-mysql-parallel-query-architecture"></a>

 La funzionalità di query in parallelo utilizza i principi architetturali chiave di Aurora MySQL: disaccoppiamento del motore di database dal sottosistema di storage e riduzione del traffico di rete mediante la razionalizzazione dei protocolli di comunicazione. Aurora MySQL utilizza queste tecniche per velocizzare le operazioni ad uso intensivo di scrittura, come l'elaborazione dei log di ripristino. La query in parallelo applica gli stessi principi alle operazioni di lettura. 

**Nota**  
 L'architettura delle query in parallelo Aurora MySQL differisce da quella delle funzionalità con nomi simili in altri sistemi di database. La query parallela Aurora MySQL non comporta l'utilizzo di multiprocessori simmetrici e quindi non dipende dalla capacità della CPU del server di database. L'elaborazione in parallelo avviene nel livello di storage, indipendentemente dal server Aurora MySQL utilizzato come coordinatore di query. 

 Per impostazione predefinita, senza le query in parallelo, l'elaborazione di una query Aurora comporta la trasmissione di dati non elaborati a un singolo nodo nel cluster Aurora (il *nodo head*). Aurora esegue quindi tutte le ulteriori elaborazioni per quella query in un singolo thread su quel singolo nodo. Con la query parallela, gran parte di questoI/O-intensive and CPU-intensive work is delegated to nodes in the storage layer. Only the compact rows of the result set are transmitted back to the head node, with rows already filtered, and column values already extracted and transformed. The performance benefit comes from the reduction in network traffic, reduction in CPU usage on the head node, and parallelizing the I/O across the storage nodes. The amount of parallel I/O, il filtraggio e la proiezione sono indipendenti dal numero di istanze DB nel cluster Aurora che esegue la query. 

### Prerequisiti
<a name="aurora-mysql-parallel-query-prereqs"></a>

Per l’utilizzo di tutte le funzionalità della query parallela è necessario un cluster di database Aurora MySQL che esegue la versione 2.09 o successiva. Se si dispone già di un cluster che si desidera utilizzare con query parallela, è possibile aggiornarlo a una versione compatibile e abilitare la query parallela in seguito. In questo caso, assicurarsi di seguire la procedura di aggiornamento in [Considerazioni relative agli aggiornamenti per le query in parallelo](aurora-mysql-parallel-query-optimizing.md#aurora-mysql-parallel-query-upgrade) perché i nomi delle impostazioni di configurazione e i valori predefiniti sono diversi in queste versioni più recenti.

Le istanze database nel cluster devono utilizzare le classi di istanza `db.r*`.

Assicurati che l'ottimizzazione del join hash sia attivata per il cluster. Per scoprire come, consulta [Abilitazione dell'hash join per cluster di query parallele](aurora-mysql-parallel-query-enabling.md#aurora-mysql-parallel-query-enabling-hash-join).

 Per personalizzare parametri quali `aurora_parallel_query` e `aurora_disable_hash_join`, è necessario disporre di un gruppo di parametri personalizzato da utilizzare con il cluster. È possibile specificare questi parametri singolarmente per ogni istanza DB utilizzando un gruppo di parametri DB. Tuttavia, si consiglia di specificarli in un gruppo di parametri cluster DB. In questo modo, tutte le istanze DB nel cluster ereditano le stesse impostazioni per questi parametri. 

### Limitazioni
<a name="aurora-mysql-parallel-query-limitations"></a>

Le seguenti limitazioni si applicano alla funzionalità di query in parallelo:
+ La query parallela non è supportata con la configurazione dell'archiviazione del cluster database Aurora I/O-Optimized.
+ Non è possibile utilizzare la query parallela con le classi di istanza db.t2 o db.t3. Questa limitazione si applica anche se si richiede la query parallela utilizzando la variabile di sessione `aurora_pq_force`.
+ La query parallela non si applica alle tabelle che utilizzano i formati di riga `COMPRESSED` o `REDUNDANT`. Utilizzare i formati di riga `COMPACT` o `DYNAMIC` per le tabelle che si intende utilizzare con la query parallela.
+ Aurora utilizza un algoritmo basato sui costi per determinare se utilizzare il meccanismo di query parallela per ogni istruzione SQL. L'utilizzo di determinati costrutti SQL in un'istruzione può impedire query parallele o rendere la query parallela improbabile per tale istruzione. Per informazioni sulla compatibilità dei costrutti SQL con la query parallela, vedere [Costrutti SQL per query in parallelo in Aurora MySQL](aurora-mysql-parallel-query-sql.md).
+ Ogni istanza database Aurora può eseguire solo un numero specifico di sessioni di query in parallelo simultanee. Se una query comporta più parti che utilizzano una query in parallelo, come sottoquery, join o operatori `UNION`, quelle fasi sono eseguite in sequenza. L'istruzione viene considerata solo come singola sessione di query in parallelo. Puoi monitorare il numero di sessioni attive mediante le [variabili di stato di query in parallelo](aurora-mysql-parallel-query-monitoring.md). Puoi verificare il limite delle sessioni simultanee per una determinata istanza database eseguendo una query sulla variabile di stato `Aurora_pq_max_concurrent_requests`.
+ L'interrogazione parallela è disponibile in tutto ciò Regioni AWS che Aurora supporta. Per la maggior parte Regioni AWS, la versione minima richiesta di Aurora MySQL per utilizzare la query parallela è 2.09.
+ La query parallela è progettata per migliorare le prestazioni delle query a uso intensivo di dati. Non è progettata per eseguire query leggere.
+ Ti consigliamo di utilizzare i nodi di lettura per le istruzioni SELECT, in particolare quelle che richiedono un uso intensivo di dati.

### Costi di I/O con la query parallela
<a name="aurora-mysql-parallel-query-cost"></a>

Se il tuo cluster Aurora MySQL utilizza una query parallela, potresti vedere un aumento dei valori di `VolumeReadIOPS`. Le query parallele non utilizzano il pool di buffer. Pertanto, sebbene le query siano veloci, questa elaborazione ottimizzata può comportare un aumento delle operazioni di lettura e degli addebiti associati.

 I/O I costi delle query parallele per la query vengono misurati a livello di archiviazione e saranno uguali o superiori con la query parallela attivata. Il vantaggio sta nel miglioramento delle prestazioni delle query. I motivi per i quali i costi di I/O sono potenzialmente più elevati con la query parallela sono due:
+ Anche se alcuni dati di una tabella si trovano nel buffer pool, la query parallela richiede la scansione di tutti i dati a livello di storage, con conseguenti costi. I/O 
+ L'esecuzione di una query parallela non prepara il pool di buffer. Di conseguenza, le esecuzioni consecutive della stessa query parallela comportano l'intero I/O costo.