

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

# Prestazioni delle query migliorate per Aurora PostgreSQL con Letture ottimizzate per Aurora
<a name="AuroraPostgreSQL.optimized.reads"></a>

Con Letture ottimizzate per Aurora è possibile velocizzare l'elaborazione delle query per Aurora PostgreSQL. Un'istanza database Aurora PostgreSQL che utilizza Letture ottimizzate per Aurora offre una latenza delle query fino a 8 volte migliorata e risparmi sui costi fino al 30% per applicazioni con set di dati di grandi dimensioni, che superano la capacità di memoria di un'istanza database.

**Topics**
+ [Panoramica di Letture ottimizzate per Aurora in PostgreSQL](#AuroraPostgreSQL.optimized.reads.overview)
+ [Utilizzo di Letture ottimizzate per Aurora](#AuroraPostgreSQL.optimized.reads.using)
+ [Casi d'uso per letture ottimizzate per Aurora](#AuroraPostgreSQL.optimized.reads.usecases)
+ [Monitoraggio delle istanze database che utilizzano Letture ottimizzate per Aurora](#AuroraPostgreSQL.optimized.reads.monitoring)
+ [Best practice per Letture ottimizzate per Aurora](#AuroraPostgreSQL.optimized.reads.bestpractices)

## Panoramica di Letture ottimizzate per Aurora in PostgreSQL
<a name="AuroraPostgreSQL.optimized.reads.overview"></a>

Aurora Optimized Reads è disponibile per impostazione predefinita quando si crea un cluster DB che utilizza istanze Graviton-based R6gd, R8gd e Intel-based R6id con storage NVMe (Memory Express) non volatile. È disponibile a partire dalle versioni di PostgreSQL seguenti:
+ 14.12 e versioni successive, 15.7 e versioni successive, 16.3 e versioni successive, 17.4 e versioni successive per istanze R8gd
+ 14.9 e versioni successive, 15.4 e versioni successive, 16.1 e tutte le versioni successive per istanze R6gd e R6id

Letture ottimizzate per Aurora supporta due funzionalità: cache a più livelli e oggetti temporanei.

Cache **ottimizzata Reads-enabled su più livelli: utilizzando la cache** a più livelli, è possibile estendere la capacità di caching delle istanze DB fino a 5 volte la memoria dell'istanza. Ciò assicura che la cache contenga automaticamente i dati più recenti e coerenti dal punto di vista transazionale, sollevando le applicazioni dall'onere di gestire la valuta dei dati delle soluzioni di caching basate su set di risultati esterni. Offre una latenza fino a 8 volte migliore per le query che in precedenza recuperavano dati dall'archiviazione di Aurora.

In Aurora, il valore per `shared_buffers` nel gruppo di parametri predefinito è in genere impostato su circa il 75% della memoria disponibile. Tuttavia, per i tipi di istanza r8gd, r6gd e r6id, Aurora riduce `shared_buffers` lo spazio del 4,5% per ospitare i metadati per la cache delle letture ottimizzate.

**Oggetti Reads-enabled temporanei ottimizzati**: utilizzando oggetti temporanei, è possibile ottenere un'elaborazione delle query più rapida posizionando i file temporanei generati da PostgreSQL nello storage NVMe locale. Ciò riduce il traffico verso Elastic Block Storage (EBS) attraverso la rete. Offre una latenza e un throughput fino a 2 volte migliori per le query avanzate che ordinano, uniscono o integrano grandi volumi di dati che non rientrano nella capacità di memoria disponibile su un’istanza database.

In un I/O-Optimized cluster Aurora, Optimized Reads utilizza sia la cache a più livelli che gli oggetti temporanei sullo storage NVMe. Con la funzionalità di cache ottimizzata Reads-enabled su più livelli, Aurora alloca il doppio della memoria di istanza per gli oggetti temporanei, circa il 10% dello storage per le operazioni interne e lo storage rimanente come cache a più livelli. In un cluster Aurora standard, Letture ottimizzate utilizza solo oggetti temporanei. 

 I/O-Optimized I cluster Aurora consentono di ridimensionare lo spazio allocato per gli oggetti Reads-enabled temporanei ottimizzati utilizzando il parametro `aurora_temp_space_size` dinamico a livello di istanza. La funzionalità di ridimensionamento è disponibile a partire dalle versioni di PostgreSQL seguenti:
+ 16.8 e tutte le versioni successive
+ 15.12 e versioni successive alla 15
+ 14.17 e versioni successive alla 14

Con questo parametro, è possibile ridimensionare la capacità da 2 volte la memoria dell'istanza fino al 90% della capacità di storage NVMe totale dell'istanza senza richiedere il riavvio del motore di database. Quando si espande lo spazio per gli oggetti temporanei, la modifica diventa immediatamente effettiva, indipendentemente dai carichi di lavoro simultanei. Tuttavia, quando si riduce lo spazio, la modifica viene completata solo se lo spazio inutilizzato per gli oggetti temporanei è sufficiente per soddisfare la nuova richiesta di dimensione. Dopo aver ridimensionato gli oggetti Reads-enabled temporanei ottimizzati, la cache a più livelli si regola automaticamente per utilizzare tutto lo spazio disponibile.



- **Edizione Aurora PostgreSQL-Compatible **
  - **Configurazione dell'archiviazione del cluster:** Standard / **Oggetti temporanei ottimizzati Reads-enabled:** Sì / **Cache ottimizzata Reads-enabled su più livelli:** No
  - **Configurazione dell'archiviazione del cluster:** I/O-Optimized / **Oggetti temporanei ottimizzati Reads-enabled:** Sì  / **Cache ottimizzata Reads-enabled su più livelli:** Sì
  - **Versioni supportate:** [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.optimized.reads.html)



**Nota**  
Il passaggio IO-Optimized da un cluster a uno standard all'altro su una classe di istanze NVMe-based DB causa un riavvio immediato del motore di database.

In Aurora PostgreSQL, utilizzare il parametro `temp_tablespaces` per configurare lo spazio della tabella in cui vengono archiviati gli oggetti temporanei.

Per verificare se gli oggetti temporanei sono configurati, utilizzare il seguente comando:

```
postgres=> show temp_tablespaces;
temp_tablespaces
---------------------
aurora_temp_tablespace
(1 row)
```

`aurora_temp_tablespace` è una tablespace configurata da Aurora che punta all'archiviazione NVMe locale. Non puoi modificare questo parametro o tornare all'archiviazione Amazon EBS.

Per verificare se la cache per le letture ottimizzate è attiva, usa il seguente comando:

```
postgres=> show shared_preload_libraries;
                 shared_preload_libraries
--------------------------------------------------------
rdsutils,pg_stat_statements,aurora_optimized_reads_cache
```

## Utilizzo di Letture ottimizzate per Aurora
<a name="AuroraPostgreSQL.optimized.reads.using"></a>

Quando si esegue il provisioning di un'istanza DB Aurora PostgreSQL con una delle istanze DB, l'istanza DB utilizza automaticamente Aurora NVMe-based Optimized Reads.

Per attivare Letture ottimizzate per Aurora, procedi in uno dei seguenti modi:
+ Crea un cluster Aurora PostgreSQL DB utilizzando una delle classi di istanze DB. NVMe-based Per ulteriori informazioni, consulta [Creazione di un cluster database Amazon Aurora](Aurora.CreateInstance.md).
+ Modifica un cluster Aurora PostgreSQL DB esistente per utilizzare una delle classi di istanze DB. NVMe-based Per ulteriori informazioni, consulta [Modifica di un cluster database Amazon Aurora](Aurora.Modifying.md).

Aurora Optimized Reads è disponibile Regioni AWS ovunque siano supportate una o più classi di istanze DB con storage SSD NVMe locale. Per ulteriori informazioni, consulta [Classi di istanze DB Amazon Aurora](Concepts.DBInstanceClass.md).

Per tornare a un’istanza senza la funzionalità Letture ottimizzate per Aurora abilitata, modificare la classe dell’istanza database dell’istanza Aurora con una classe di istanza simile senza l’archiviazione temporanea NVMe per i carichi di lavoro del database. Ad esempio, se la classe di istanza database corrente è db.r6gd.4xlarge, scegli db.r6g.4xlarge per tornare indietro. Per ulteriori informazioni, consulta la pagina relativa alla [modifica di un'istanza database Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html).

## Casi d'uso per letture ottimizzate per Aurora
<a name="AuroraPostgreSQL.optimized.reads.usecases"></a>

**Cache Reads-enabled ottimizzata su più livelli**

Di seguito sono riportati alcuni casi d'uso in cui è possibile trarre vantaggio dalla funzionalità Letture ottimizzate con cache a più livelli:
+ Applicazioni Internet su scala, come elaborazione dei pagamenti, fatturazione, e-commerce con SLA prestazionali rigorosi.
+ Real-time dashboard di reporting che eseguono centinaia di interrogazioni mirate a fini di raccolta. metrics/data 
+ Applicazioni di intelligenza artificiale generativa con l'estensione pgvector per la ricerca di vicini esatti o più prossimi tra milioni di incorporamenti vettoriali.

**oggetti temporanei ottimizzati Reads-enabled **

Di seguito sono riportati alcuni casi d'uso in cui è possibile trarre vantaggio dalla funzionalità Letture ottimizzate con oggetti temporanei:
+ Query analitiche con espressioni di tabella comuni (CTE), tabelle derivate e operazioni di raggruppamento.
+ Repliche di lettura che gestiscono le query non ottimizzate per un'applicazione.
+ On-demand o query di reporting dinamiche con operazioni complesse come GROUP BY e ORDER BY che non sempre possono utilizzare indici appropriati.
+ Operazioni `CREATE INDEX` o `REINDEX` per l’ordinamento.
+ Altri carichi di lavoro che utilizzano tabelle temporanee interne.

## Monitoraggio delle istanze database che utilizzano Letture ottimizzate per Aurora
<a name="AuroraPostgreSQL.optimized.reads.monitoring"></a>

È possibile monitorare le query che utilizzano la cache a Reads-enabled più livelli ottimizzata con il comando EXPLAIN, come illustrato nell'esempio seguente:

```
Postgres=> EXPLAIN (ANALYZE, BUFFERS) SELECT c FROM sbtest15 WHERE id=100000000                   

QUERY PLAN
--------------------------------------------------------------------------------------
 Index Scan using sbtest15_pkey on sbtest15  (cost=0.57..8.59 rows=1 width=121) (actual time=0.287..0.288 rows=1 loops=1)
   Index Cond: (id = 100000000)
   Buffers: shared hit=3 read=2 aurora_orcache_hit=2
   I/O Timings: shared/local read=0.264
 Planning:
   Buffers: shared hit=33 read=6 aurora_orcache_hit=6
   I/O Timings: shared/local read=0.607
 Planning Time: 0.929 ms
 Execution Time: 0.303 ms
(9 rows)
Time: 2.028 ms
```

**Nota**  
I campi `aurora_orcache_hit` e `aurora_storage_read` della sezione `Buffers` del piano di spiegazione vengono visualizzati solo quando la funzionalità Letture ottimizzate è attivata e i valori sono maggiori di zero. Il campo Lettura indica il totale dei campi `aurora_orcache_hit` e `aurora_storage_read`.

È possibile monitorare le istanze DB che utilizzano Aurora Optimized Reads utilizzando le seguenti metriche: CloudWatch
+ `AuroraOptimizedReadsCacheHitRatio`
+ `FreeEphemeralStorage`
+ `ReadIOPSEphemeralStorage`
+ `ReadLatencyEphemeralStorage`
+ `ReadThroughputEphemeralStorage`
+ `WriteIOPSEphemeralStorage`
+ `WriteLatencyEphemeralStorage`
+ `WriteThroughputEphemeralStorage`

Queste metriche forniscono dati sullo spazio di archiviazione dell'archivio dell'istanza, sulle operazioni IOPS e sulla velocità di trasmissione effettiva disponibili. Per ulteriori informazioni su questi parametri, consulta [Instance-level metriche per Amazon Aurora](Aurora.AuroraMonitoring.Metrics.md#Aurora.AuroraMySQL.Monitoring.Metrics.instances).

È anche possibile utilizzare l'estensione `pg_proctab` per monitorare l'archiviazione NVMe. 

```
postgres=>select * from pg_diskusage();

major | minor |       devname       | reads_completed | reads_merged | sectors_read | readtime | writes_completed | writes_merged | sectors_written | writetime | current_io | iotime  | totaliotime
------+-------+---------------------+-----------------+--------------+--------------+----------+------------------+---------------+-----------------+-----------+------------+---------+-------------
      |       | rdstemp             |           23264 |            0 |       191450 |    11670 |          1750892 |             0 |        24540576 |    819350 |          0 | 3847580 |      831020
      |       | rdsephemeralstorage |           23271 |            0 |       193098 |     2620 |           114961 |             0 |        13845120 |    130770 |          0 |  215010 |      133410
(2 rows)
```

## Best practice per Letture ottimizzate per Aurora
<a name="AuroraPostgreSQL.optimized.reads.bestpractices"></a>

Usa le seguenti best practice per Letture ottimizzate per Aurora:
+ Monitora lo spazio di archiviazione disponibile sull'instance store con la metrica. CloudWatch `FreeEphemeralStorage` Se l’archivio dell’istanza sta raggiungendo il limite a causa del carico di lavoro sull’istanza database, ottimizzare la concorrenza e le query che utilizzano grandi volumi di oggetti temporanei oppure modificarlo affinché utilizzi una classe di istanza database più grande.
+ Monitora la CloudWatch metrica per la frequenza di accesso alla cache di Optimized Reads. Operazioni come VACUUM permettono di modificare blocchi numerosi molto rapidamente. Ciò può causare un calo temporaneo della percentuale di riscontri. Utilizza l'estensione `pg_prewarm` per caricare dati nella cache del buffer che consente ad Aurora di scrivere in modo proattivo alcuni di questi blocchi nella cache delle Letture ottimizzate.
+ È possibile abilitare Gestione della cache del cluster (CCM) per preparare la cache del buffer e la cache a più livelli su un lettore di livello 0, che verrà utilizzato come destinazione di failover. Quando la funzionalità CCM è abilitata, la cache del buffer viene scansionata periodicamente per scrivere pagine idonee all'espulsione nella cache a più livelli. Per ulteriori informazioni sulla CCM, consulta [Ripristino rapido dopo il failover con Cluster Cache Management per Aurora PostgreSQL](AuroraPostgreSQL.cluster-cache-mgmt.md). 