Novedades en PostgreSQL 13

elefante sobre fondo negro

En Septiembre de 2020 se lanzó la última versión del sistema de bases de datos PostgreSQL, es versión 13 del popular sistema de gestión de bases de datos libre se enmarca dentro del nuevo esquema de versiones que comenzó con la versión 10, y que permite un ciclo de desarrollo más rápido. Esta versión incorpora una serie de novedades muy solicitadas por los usuarios como es el vacuum paralelizado o las ordenaciones incrementales, vamos a revisar la lista con los cambios más relevantes:

Lista de mejoras:

Vacuum paralelo:

A medida que se generan versiones nuevas de los campos, las filas de una tabla o de los nodos de un índice, se mantienen las versiones anteriores mediante descriptores para permitir que transacciones externas puedan mantener la coherencia, cuando se envían los cambios y se consolidan, se eliminan los descriptores antiguos, pero no se reclama el espacio y se compacta la estructura, esto se hace mediante un proceso dedicado conocido como VACUUM, a partir de la versiñon 13, este proceso se puede realizar en paralelo, indicando el número de trabajadores que se quieren utilizar para agilizar el proceso.

Ordenación incremental:

Los resultados de ordenaciones intermedias se pueden reutilizar en pasos posteriores del plan de ejecución para ahorrar tiempo de ejecución. Esto quiere decir, que si una serie de resultados se han ordenado en un paso anterior y en el paso siguiente esos mismos resultados (o un subconjunto o esos mismos resultados como parte de un conjunto mayor) forman parte de una ordenación, se reutiliza el resultado del paso anterior con el consiguiente ahorro de tiempo de proceso.

Mejoras en las particiones:

Incluye una lista de mejoras a la hora de utilizar particiones, entre las que destacan:

  • Una mejora en el uso de particiones para búsquedas - el planificador utiliza la definición de la partición para descartarla en un mayor número de casos.
  • Mejoras en las uniones entre tablas particionadas, permitiendo realizar las uniones entre particiones por separado.
  • PostgreSQL ahora permite el uso de triggers BEFORE(que se ejecutan antes de la acción) en tablas particionadas, aunque esto no permite al trigger cambiar la partición de destino.
  • Se permite utilizar publicaciones para replicar lógicamente tablas particionadas.
  • Se permite la partición por todos los elementos de la tabla: table.*

Mejoras en las gestión de índices:

Incluye una lista de mejoras en los índices, la principal mejora es una optimización de la gestión de duplicados en índices B-Tree, que permite un menor uso de espacio y una mejora en el rendimiento, sobre todo en el caso de índices de baja cardinalidad.

Mejoras en el planificador:

Incluye una lista de mejoras en el planificador, a mi modo de ver las más importantes afectan a las estadísitcas extendidas, ahora se puede gestionar directamente el objetivo en un comando ALTER y se pueden utilizar más de una estadística extendida por consulta, además de extender su uso a consultas OR y ANY. Las estadísticas extendidas permiten realizar un muestreo estadístico más profundo en las tablas, para identificar correlaciones entre columnas y datos y, de este modo, mejorar la efectividad del planificador. Un ejemplo muy simple es una tabla con dos columnas en las que el valor de la columna 1 y el valor de la columna 2 son siempre distintos, las estadísticas extendidas permiten al planificador evitar escanear las filas por duplicado en casos en los que queramos hayar aquellas filas en las que una de las dos columnas sea igual a un valor dado.

Mejoras en el rendimiento general:

Incluye diversas mejoras como la posibilidad de realizar operaciones de tipo hash en disco y, sobre todo, la posibilidad de limitar la concurrencia de E/S de las operaciones de mantenimiento, para evitar que estas generen problemas de rendimiento en el sistema, además de agilizan procesos como el truncado de tablas muy grandes y la conversión de enteros a texto. Además se mejora el rendimiento en funciones Pl/PgSQL pequeñas.

Mejoras en la monitorización:

Las funciones de tipo explain ahora permiten seguir el uso de segmentos WAL, para ver cómo se ven afectados por las consultas, permite realizar un muestreo en funciones de registro de consultas lentas, para evitar un uso excesivo de espacio en los logs, de esta forma, solo un porcentaje de las consultas que cumplan las condiciones serán enviadas al registro. Se añaden además una serie de nuevas vistas de sistema para poder acceder a datos como el progreso de procesos de replicación o de análisis.

Mejoras en la gestión:

Una de las mejoras más importantes para mi gusto es la posibilidad de cambiar parámetros de conexión de la replicación (los datos del maestro o del zócalo de replicación) sin tener que reiniciar el servidor. De esta forma, si tenemos un escenario con varias réplicas de solo lectura conectadas a un mismo primario y el primario cae, no será necesario reiniciar las réplicas para hacer que apunten al nuevo primario.

Si alguna (o todas) las funcionalidades justifican actualizar desde una versión anterior, el proceso de actualización entre versiones de Postgres es bastante sencillo, aunque no inmediato.

Si actualmente no utilizas la versión 12 de PostgreSQL, en este artículo puede leer la lista de novedades de PostgreSQL 12

Tags