Mejora del rendimiento de las consultas de Aurora PostgreSQL con lecturas optimizadas de Aurora - Amazon Aurora

Mejora del rendimiento de las consultas de Aurora PostgreSQL con lecturas optimizadas de Aurora

Puede conseguir un procesamiento de consultas más rápido para Aurora PostgreSQL con las lecturas optimizadas de Aurora. Una instancia de la base de datos Aurora PostgreSQL que utiliza las lecturas optimizadas de Aurora ofrece una reducción de la latencia de las consultas de hasta 8 veces y un ahorro de costes de hasta el 30 % para aplicaciones con conjuntos de datos de gran tamaño que superan la capacidad de memoria de una instancia de base de datos.

Información general de las lecturas optimizadas de Aurora en PostgreSQL

Las lecturas optimizadas de Aurora están disponibles de forma predeterminada cuando se crea un clúster de base de datos que utiliza instancias R6gd basadas en Graviton e instancias R6id basadas en Intel con almacenamiento de memoria no volátil exprés (NVMe). Está disponible a partir de las siguientes versiones de PostgreSQL:

  • Versión 16.1 y todas las versiones posteriores

  • Versión 15.4 y posteriores

  • Versión 14.9 y posteriores

Las lecturas optimizadas de Aurora admiten dos capacidades: caché por niveles y objetos temporales.

Caché por niveles habilitada para lecturas optimizadas: con la caché por niveles, puede multiplicar por 5 la capacidad de almacenamiento en caché de la instancia de base de datos. De este modo, la caché se mantiene automáticamente con los datos más recientes y coherentes a nivel de transacción, lo que libera a las aplicaciones de la sobrecarga que supone administrar la vigencia de los datos en soluciones de almacenamiento en caché externas basadas en conjuntos de resultados. Ofrece una latencia hasta 8 veces mejor para las consultas que anteriormente obtenían datos del almacenamiento de Aurora.

En Aurora, el valor de shared_buffers en el grupo de parámetros predeterminado suele estar establecido en torno al 75 % de la memoria disponible. Sin embargo, para los tipos de instancia r6gd y r6id, Aurora reducirá el espacio de shared_buffers un 4,5 % para alojar los metadatos de la caché de lecturas optimizadas.

Objetos temporales habilitados para lecturas optimizadas: mediante el uso de objetos temporales, puede lograr un procesamiento de consultas más rápido si ubica los archivos temporales generados por PostgreSQL en el almacenamiento NVMe local. Así se reduce el tráfico hacia Elastic Block Storage (EBS) a través de la red. Ofrece una latencia y un rendimiento hasta dos veces mejores para consultas avanzadas que ordenan, unen o fusionan grandes volúmenes de datos que no caben en la capacidad de memoria disponible en una instancia de base de datos.

En un clúster optimizado para E/S de Aurora, las lecturas optimizadas utilizan tanto la caché por niveles como los objetos temporales del almacenamiento NVMe. Con la función de caché por niveles habilitada para lecturas optimizadas, Aurora asigna el doble de la memoria de instancia para objetos temporales, aproximadamente el 10 % del almacenamiento para operaciones internas y el almacenamiento restante como caché por niveles. En un clúster estándar de Aurora, las lecturas optimizadas utilizan únicamente objetos temporales.

Motor Configuración de almacenamiento en clústeres Objetos temporales habilitados para lecturas optimizadas Caché por niveles optimizada y habilitada para las lecturas optimizadas Versiones admitidas
Aurora PostgreSQL-Compatible Edition Estándar No Aurora PostgreSQL versión 16.1 y todas las versiones posteriores, versión 15.4 y posteriores, versión 14.9 y posteriores
Optimización de E/S
nota

Al cambiar entre clústeres estándar y optimizados para E/S en una clase de instancia de base de datos basada en NVMe, se reinicia inmediatamente el motor de base de datos.

En Aurora PostgreSQL, utilice el parámetro temp_tablespaces para configurar el espacio de tabla donde se almacenan los objetos temporales.

Para comprobar si los objetos temporales están configurados, utilice el siguiente comando:

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

aurora_temp_tablespace es un espacio de tabla configurado por Aurora que apunta hacia el almacenamiento local de NVMe. No puede modificar este parámetro ni volver al almacenamiento de Amazon EBS.

Para comprobar si la caché de lecturas optimizada está activada, utilice el siguiente comando:

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

Uso de lecturas optimizadas de Aurora

Al aprovisionar una instancia de base de datos de Aurora PostgreSQL con instancias de base de datos basadas en NVMe, la instancia de base de datos utiliza automáticamente lecturas optimizadas de Aurora.

Para activar las lecturas optimizadas de Aurora, realice una de las siguientes acciones:

Las lecturas optimizadas de Aurora están disponibles en todas las Regiones de AWS donde se admite una o más de las clases de instancia de base de datos con almacenamiento SSD NVMe local. Para obtener más información, consulte Clases de instancia de base de datos de Aurora.

Para volver a una instancia de Aurora con lecturas no optimizadas, modifique la clase de instancia de base de datos de su instancia de Aurora por una clase de instancia similar sin almacenamiento efímero de NVMe para sus cargas de trabajo de base de datos. Por ejemplo, si la clase de instancia de base de datos actual es db.r6gd.4xlarge, elija db.r6g.4xlarge para volver atrás. Para obtener más información, consulte Modificación de una instancia de base de datos de Aurora.

Casos de uso de lecturas optimizadas de Aurora

Caché por niveles optimizada y habilitada para las lecturas optimizadas

Estos son algunos casos de uso que pueden beneficiarse de las lecturas optimizadas con caché por niveles:

  • Aplicaciones de Internet como procesamiento de pagos, facturación, comercio electrónico con estrictos SLA de rendimiento.

  • Paneles de informes en tiempo real que ejecutan cientos de consultas puntuales para recopilar métricas o datos.

  • Aplicaciones de IA generativa con la extensión pgvector para buscar vecinos exactos o más cercanos entre millones de incrustaciones vectoriales.

Objetos temporales habilitados para lecturas optimizadas

Estos son algunos casos de uso que pueden beneficiarse de las lecturas optimizadas con objetos temporales:

  • Consultas analíticas que incluyen expresiones comunes de tabla (CTE), tablas derivadas y operaciones de agrupación.

  • Réplicas de lectura que gestionan consultas no optimizadas de una aplicación.

  • Consultas de informes dinámicas o bajo demanda con operaciones complejas, como GROUP BY y ORDER BY, que no siempre pueden utilizar los índices adecuados.

  • Operaciones CREATE INDEX o REINDEX de ordenación.

  • Otras cargas de trabajo que utilizan tablas temporales internas.

Supervisión de instancias de base de datos que utilizan lecturas optimizadas de Aurora

Puede supervisar las consultas que utilizan la caché por niveles habilitada para lecturas optimizadas con el comando EXPLAIN, como se muestra en el siguiente ejemplo:

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

Los campos aurora_orcache_hit y aurora_storage_read de la sección Buffers del plan explicativo solo se muestran cuando las lecturas optimizadas están activadas y sus valores son superiores a cero. El campo de lectura es el total de los campos aurora_orcache_hit y aurora_storage_read.

Puede supervisar las instancias de base de datos que utilizan lecturas optimizadas de Aurora con las siguientes métricas de CloudWatch:

  • AuroraOptimizedReadsCacheHitRatio

  • FreeEphemeralStorage

  • ReadIOPSEphemeralStorage

  • ReadLatencyEphemeralStorage

  • ReadThroughputEphemeralStorage

  • WriteIOPSEphemeralStorage

  • WriteLatencyEphemeralStorage

  • WriteThroughputEphemeralStorage

Estas métricas proporcionan datos sobre el almacén de instancias disponible, las IOPS y el rendimiento. Para obtener más información sobre estas métricas, consulte Métricas de nivel de instancia para Amazon Aurora.

También puede utilizar la extensión pg_proctab para supervisar el almacenamiento 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)

Prácticas recomendadas para lecturas optimizadas de Aurora

Utilice estas prácticas recomendadas para las lecturas optimizadas de Aurora:

  • Supervise el espacio de almacenamiento disponible en el almacén de instancias con la métrica de CloudWatch FreeEphemeralStorage. Si el almacén de instancias alcanza su límite debido a la carga de trabajo de la instancia de base de datos, ajuste la simultaneidad y las consultas que utilicen demasiados objetos temporales o modifíquelas para utilizar una clase de instancia de base de datos más grande.

  • Supervise la métrica de CloudWatch para conocer la tasa de aciertos de caché de lecturas optimizadas. Operaciones como VACUUM modifican grandes cantidades de bloques con gran rapidez. Esto puede provocar una caída temporal en la tasa de aciertos. La extensión pg_prewarm se puede utilizar para cargar datos en la caché del búfer que permite a Aurora escribir algunos de estos bloques directamente en la caché de lecturas optimizadas.

  • Puede habilitar la administración de la caché de clúster (CCM) para calentar la caché del búfer y la caché por niveles en un lector de nivel 0, que se utilizará como destino de conmutación por error. Si la CCM está activada, la caché del buffer se escanea periódicamente para escribir páginas que puedan eliminarse en la caché por niveles. Para obtener más información sobre CCM, consulte Recuperación rápida después de una conmutación por error con la administración de caché del clúster para Aurora PostgreSQL.