View a markdown version of this page

Administración de recuentos de objetos altos en Amazon Aurora PostgreSQL - Amazon Aurora

Administración de recuentos de objetos altos en Amazon Aurora PostgreSQL

Aunque las limitaciones de PostgreSQL son teóricas, tener recuentos de objetos extremadamente altos en una base de datos provocará un impacto notable en el rendimiento de varias operaciones. Esta documentación cubre varios tipos de objetos comunes que, cuando tienen un recuento total alto, pueden tener varios posibles impactos.

En la tabla siguiente, se proporciona un resumen de los tipos de objetos y sus posibles impactos:

Tipos de objetos e impactos potenciales
Tipo de objeto Limpieza automática Replicación lógica Actualización de la versión principal pg_dump/pg_restore Rendimiento general Reinicio de la instancia
Relaciones x x x x
Tablas temporales x x
Tablas sin registrar x x
Particiones x
Archivos temporales x
Secuencias x
Objetos grandes x x

Relaciones

No hay un límite estricto específico en cuanto al número de tablas en una base de datos de PostgreSQL. El límite teórico es extremadamente alto, pero hay otros límites prácticos que deben tenerse en cuenta al diseñar la base de datos.

Impacto: la limpieza automática se queda atrás

La limpieza automática puede tener dificultades para mantenerse al día con el crecimiento de ID de transacciones o la sobrecarga de la tabla debido a la falta de personal en comparación con la cantidad de trabajo.

Acción recomendada: existen varios factores para ajustar la limpieza automática a fin de que pueda funcionar correctamente con un número determinado de tablas y una carga de trabajo determinada. Consulte Prácticas recomendadas para trabajar con la limpieza automática de PostgreSQL para obtener sugerencias sobre cómo determinar la configuración de limpieza automática adecuada. Utilice la utilidad postgres_get_av_diag para supervisar los problemas relacionados con el crecimiento de ID de transacción.

Impacto: actualización de la versión principal/pg_dump y restauración

Amazon RDS utiliza la opción “--link” durante la ejecución de pg_upgrade para evitar tener que hacer copias de los archivos de datos. Aun así, es necesario restaurar los metadatos del esquema en la nueva versión de la base de datos. Incluso con pg_restore paralelo, si hay un número significativo de relaciones, esto aumentará la cantidad de tiempo de inactividad.

Impacto: degradación general del rendimiento

Degradación general del rendimiento debido al tamaño del catálogo. Cada tabla y sus columnas asociadas se agregarán a las tablas de pg_attribute, pg_class y pg_depend que se utilizan con frecuencia en las operaciones normales de la base de datos. No habrá ningún evento de espera específico visible, pero la eficiencia del búfer compartido se verá afectada.

Acción recomendada: compruebe con regularidad la sobrecarga de la tabla para estas tablas específicas y, de vez en cuando, realice una operación VACUUM FULL en estas tablas específicas. Tenga en cuenta que VACUUM FULL en las tablas del catálogo requiere un bloqueo ACCESS EXCLUSIVE, lo que significa que ninguna otra consulta podrá acceder a ellas hasta que se complete la operación.

Umbral aproximado: millones

Tablas temporales

El uso de tablas temporales es útil para datos de prueba o resultados intermedios y es un patrón común que se observa en muchos motores de bases de datos. Hay que entender las implicaciones del uso intensivo de PostgreSQL para evitar algunas de las dificultades. Cada tabla temporal creada y eliminada agregará filas a las tablas del catálogo del sistema, lo que, cuando se sobrecargue, provocará problemas generales de rendimiento.

Impacto: la limpieza automática se queda atrás

Las tablas temporales no se aspiran con limpieza automática, sino que conservan los ID de las transacciones durante su existencia y, si no se retiran, pueden quedar ocultas.

Acción recomendada: las tablas temporales permanecerán activas mientras dure la sesión en la que se crearon o se pueden eliminar manualmente. Una práctica recomendada consiste en evitar las transacciones de larga duración con tablas temporales para evitar que estas tablas contribuyan al máximo crecimiento de los ID de transacción utilizados.

Impacto: degradación general del rendimiento

Degradación general del rendimiento debido al tamaño del catálogo. Cuando las sesiones crean y descartan tablas temporales de forma continua, se agregan a tablas de pg_attribute, pg_class y pg_depend que se utilizan con frecuencia en las operaciones normales de la base de datos. No habrá ningún evento de espera específico visible, pero la eficiencia del búfer compartido se verá afectada.

Acción recomendada:

  • compruebe con regularidad la sobrecarga de la tabla para estas tablas específicas y, de vez en cuando, realice una operación VACUUM FULL en estas tablas específicas. Tenga en cuenta que VACUUM FULL en las tablas del catálogo requiere un bloqueo ACCESS EXCLUSIVE, lo que significa que ninguna otra consulta podrá acceder a ellas hasta que se complete la operación.

  • Si se utilizan mucho las tablas temporales, antes de actualizar una versión principal, se recomienda encarecidamente utilizar una operación VACUUM FULL de estas tablas de catálogo específicas para reducir el tiempo de inactividad.

Prácticas recomendadas generales:

  • reduzca el uso de tablas temporales mediante el uso de expresiones de tablas comunes para obtener resultados intermedios. A veces, esto puede complicar las consultas necesarias, pero se eliminarán los impactos mostrados anteriormente.

  • Reutilice las tablas temporales mediante el comando TRUNCATE para borrar el contenido en lugar de realizar los pasos de eliminar o crear. Esto también eliminará el problema del crecimiento del ID de transacción provocado por las tablas temporales.

Umbral aproximado: decenas de miles

Tablas sin registrar

Las tablas no registradas pueden ofrecer mejoras de rendimiento, ya que no generarán ninguna información de WAL. Se deben usar con cuidado, ya que no ofrecen durabilidad durante la recuperación de un error de la base de datos, ya que se truncarán. Esta es una operación costosa en PostgreSQL, ya que cada tabla no registrada se trunca en serie. Aunque esta operación es rápida para un número reducido de tablas sin registrar, cuando se cuentan por miles, puede empezar a provocar un retraso notable durante el inicio.

Impacto: replicación lógica

Por lo general, las tablas no registradas no se incluyen en la replicación lógica, como implementaciones azul/verde, porque la replicación lógica se basa en WAL para capturar y transferir los cambios. Obtenga más información sobre cómo configurar Aurora PostgreSQL para replicar tablas no registradas.

Impacto: nodos de lector

Solo puede acceder a las tablas no registradas desde el nodo de escritura del clúster de base de datos de Aurora. Consulte Trabajo con tablas no registradas en Aurora PostgreSQL para obtener todos los detalles.

Prácticas recomendadas generales:

  • Las tablas no registradas ofrecen beneficios de rendimiento limitados en Aurora PostgreSQL en comparación con PostgreSQL estándar, por lo que debe evaluar si las tablas normales son más adecuadas.

Umbral aproximado: miles

Particiones

El particionamiento puede aumentar el rendimiento de las consultas y proporcionar una organización lógica de los datos. En situaciones ideales, el particionamiento se organiza de manera que se pueda utilizar la depuración de particiones durante la planificación y ejecución de las consultas. El uso de demasiadas particiones puede tener un impacto negativo en el rendimiento de las consultas y en el mantenimiento de la base de datos. La elección de cómo particionar una tabla debe hacerse con cuidado, ya que un diseño deficiente puede afectar negativamente al rendimiento de la planificación y ejecución de las consultas. Consulte la documentación de PostgreSQL para obtener más información sobre las particiones.

Impacto: degradación general del rendimiento

A veces, la sobrecarga de tiempo de planificación aumentará y la explicación de los planes para las consultas se volverá más complicada, lo que dificultará la identificación de las oportunidades de ajuste. En el caso de las versiones de PostgreSQL anteriores a la 18, muchas particiones con una gran carga de trabajo pueden provocar esperas de LWLock:LockManager.

Acción recomendada: determine un número mínimo de particiones que permita completar la organización de los datos y, al mismo tiempo, ejecutar las consultas de forma eficaz.

Impacto: complejidad del mantenimiento

Un número muy elevado de particiones provocará dificultades de mantenimiento, como la creación previa y la eliminación. La limpieza automática tratará las particiones como si fueran relaciones normales y tendrá que realizar una limpieza periódica, por lo que necesitará un número suficiente de trabajadores para completar la tarea.

Acción recomendada:

  • asegúrese de crear previamente las particiones para que la carga de trabajo no se bloquee cuando se necesite una nueva partición (por ejemplo, particiones mensuales) y se eliminen las particiones antiguas.

  • Asegúrese de tener suficientes trabajadores de limpieza automática para llevar a cabo la limpieza y el mantenimiento normales de todas las particiones.

Umbral aproximado: cientos

Archivos temporales

A diferencia de las tablas temporales mencionadas anteriormente, PostgreSQL crea los archivos temporales cuando una consulta compleja puede realizar varias operaciones de ordenación y hash al mismo tiempo, y cada una de ellas utiliza memoria de la instancia para almacenar los resultados hasta el valor especificado en el parámetro work_mem. Cuando la memoria de la instancia no es suficiente, se crean archivos temporales para almacenar los resultados. Consulte Administración de archivos temporales para obtener más información sobre los archivos temporales. Si la carga de trabajo genera un número alto de estos archivos, puede haber varios impactos.

Impacto: consumo de FreeLocalStorage

Los archivos temporales son una parte necesaria de PostgreSQL cuando los resultados de las consultas no caben en work_mem. Está bien en general. Sin embargo, cuando la carga de trabajo lo utiliza mucho, eso indica que se están ejecutando consultas de gran tamaño de forma continua y se observará una disminución del uso de FreeLocalStorage. Consulte Administración de archivos temporales para obtener más información.

Prácticas recomendadas generales:

  • Supervise el uso de los archivos temporales con Información de rendimiento.

  • Ajuste las consultas que generan archivos temporales importantes para ver si es posible reducir el número total de archivos temporales.

Umbral aproximado: miles

Secuencias

Las secuencias son el objeto subyacente que se utiliza para incrementar automáticamente las columnas en PostgreSQL y proporcionan exclusividad y una clave para los datos. Se pueden usar en tablas individuales sin consecuencias durante las operaciones normales, con una excepción de la replicación lógica.

En PostgreSQL, la replicación lógica actualmente no replica el valor actual de una secuencia a ningún suscriptor. Para obtener más información, consulte Página de restricciones en la documentación de PostgreSQL.

Impacto: se prolongó el tiempo de conmutación

Si planea usar Implementaciones azules/verdes para cualquier tipo de cambio o actualización de configuración, es importante que comprenda el impacto de un gran número de secuencias en la conmutación. Una de las últimas fases de la conmutación sincronizará el valor actual de las secuencias y, si hay varios miles, aumentará el tiempo total de conmutación.

Acción recomendada: si la carga de trabajo de la base de datos permitiera el uso de un UUID compartido en lugar de un enfoque de secuencia por tabla, esto reduciría el paso de sincronización durante una conmutación.

Umbral aproximado: miles

Objetos grandes

Los objetos grandes se almacenan en una sola tabla del sistema llamada pg_largeobject. Cada objeto grande también tiene una entrada en la tabla del sistema pg_largeobject_metadata. Estos objetos se crean, modifican y limpian de forma muy diferente a las relaciones estándar. Los objetos grandes no se manipulan con limpieza automática y deben limpiarse periódicamente mediante un proceso independiente llamado vacuumlo. Consulte la sección sobre administración de objetos grandes con el módulo lo para ver ejemplos sobre la administración de objetos grandes.

Impacto: replicación lógica

Los objetos grandes no se replican actualmente en PostgreSQL durante la replicación lógica. Para obtener más información, consulte Página de restricciones en la documentación de PostgreSQL. En una configuración azul/verde, esto significa que los objetos grandes del entorno azul no se replican en el entorno verde.

Impacto: actualización a la versión principal

Una actualización puede quedarse sin memoria y fallar si hay millones de objetos grandes y la instancia no puede gestionarlos durante una actualización. El proceso de actualización a la versión principal de PostgreSQL consta de dos amplias fases: el volcado del esquema a través de pg_dump y la restauración de este a través de pg_restore. Si su base de datos tiene millones de objetos de gran tamaño, debe asegurarse de que la instancia tenga memoria suficiente para gestionar pg_dump y pg_restore durante una actualización y escalarla a un tipo de instancia más grande.

Prácticas recomendadas generales:

  • Use regularmente la utilidad vacuumlo para eliminar cualquier objeto grande huérfano que pueda tener.

  • Considere la posibilidad de utilizar el tipo de datos BYTEA para almacenar los objetos grandes en la base de datos.

Umbral aproximado: millones

Umbrales aproximados

Los umbrales aproximados que se mencionan en este tema solo se utilizan para proporcionar una estimación de hasta qué punto puede escalar un recurso en particular. Representan el rango general en el que los impactos descritos son más probables, pero el comportamiento real depende de la carga de trabajo, el tamaño de la instancia y la configuración específicos. Aunque es posible superar estas estimaciones, se deben respetar los cuidados y el mantenimiento para evitar los impactos mostrados.