DALL·E 2024 04 14 11.59.56 Imagine a 1024x1024 pixels illustration that visualizes enhancing performance in PostgreSQL 17 using the function pg buffercache evict. The image sh

PostgreSQL 17: Mejorar el rendimiento con pg_buffercache_evict()

Resumen del post de hoy:

  • Últimas actualizaciones de PostgreSQL 17.
  • Introducción a la nueva función pg_buffercache_evict()
  • Situaciones en las que pg_buffercache_evict() puede ser útil
  • Cómo usar pg_buffercache_evict() y código de ejemplo.
  • Limitaciones y consideraciones de pg_buffercache_evict()

Introducción

PostgreSQL, el popular sistema de bases de datos relacionales de código abierto, ha lanzado recientemente su versión 17.

En PostgreSQL hasta la versión 16, no hay manera de desalojar la caché de búfer, excepto reiniciando la instancia.

En Oracle se puede hacer desde hace mucho tiempo con «alter system flush buffer cache», pero no en PostgreSQL. Esto cambiará cuando PostgreSQL 17 sea lanzado a finales de este año.

Si bien es cierto que vaciar la caché del búfer no es algo que uno quiera hacer en producción, esta funcionalidad puede ser muy útil para entornos de desarrollo o de depuración.

Esta es también la razón por la que se pretende que sea una característica para desarrolladores.

Cómo instalar pg_buffercache

Para tener acceso a la función pg_buffercache_evict() necesitas instalar la extensión pg_buffercache ya que la función está diseñada para trabajar sobre la vista pg_buffercache.

image 1

Una vez colocada la extensión, la función también está ahí:

postgres=# \dfS *evict*
                               List of functions
 Schema |         Name         | Result data type | Argument data types | Type 
--------+----------------------+------------------+---------------------+------
 public | pg_buffercache_evict | boolean          | integer             | func
(1 row)

Cuándo utilizar la función: caso de uso

A veces, la caché del búfer puede llenarse tanto que empiece a afectar al rendimiento de la base de datos. En ese caso, lo que querrías es desalojar algunos datos de ella.

Ahí es exactamente donde nuestro nuevo amigo pg_buffercache_evict() entra en acción, permitiéndote limpiar manualmente tu caché de búfer, dándote un mejor control sobre el rendimiento de tu base de datos.

Ejemplo

Vamos a empezar por cargar algo en la caché del buffer para posteriormente vaciarla.

Para este llenado haremos uso de la extensión pre_warm y cargaremos completamente la tabla que crearemos después:

image 2

Veamos ahora cómo usar pg_buffercache_evict(). La función toma dos argumentos: el relation OID de la base de datos y el número de páginas que desea desalojar. Es bastante sencillo.

postgres=# select pg_buffercache_evict(bufferid) from pg_buffercache where relfilenode = 16401;
 pg_buffercache_evict 
----------------------
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
 t
(58 rows)

Haciendo un cross-check podemos confirmar que todos los bloques han desaparecido de la buffer cache:

image 3

Limitaciones de pg_buffercache_evict()

Ten en cuenta que cuando usamos pg_buffercache_evict(), sólo funciona con buffers compartidos y no puede desalojar páginas de otros tipos de cachés.

Tampoco puede desalojar páginas que se consideren vitales para los procesos del sistema.

Resumen

La función pg_buffercache_evict() incluida en PostgreSQL 17 es una gran herramienta para los administradores de bases de datos que buscan gestionar y optimizar el rendimiento de la base de datos.

Aunque útil, recuerda sus limitaciones: la imposibilidad de trabajar con otras cachés y las restricciones para desalojar ciertas páginas.

En general, pg_buffercache_evict() es una característica más en una serie de mejoras continuas de PostgreSQL – ¡siempre es emocionante ver lo que vienen a continuación!

¡Eso es todo por hoy!

Únete a la lista de emails para no perderte nada

No tengo ningún producto, publicidad, ni nada que venderte. De hecho, aún no tengo nada que hacer con estos emails. Pero si te interesa estar en contacto o no perderte las próximas actualizaciones en el futuro… Ya sabes 😉

    ¿Quieres trabajar con nosotros?

    Ya sea que necesites mejorar el rendimiento de consultas existentes, planificar y ejecutar migraciones de datos críticas, diseñar bases de datos desde cero o mantener un entorno de base de datos estable, estamos aquí para ayudarte.

    Trabajamos con una amplia variedad de sistemas de gestión de bases de datos (DBMS) y estamos comprometidos en proporcionar soluciones adaptadas a tus necesidades específicas. Puedes consultar nuestra lista completa de servicios aquí.

    Confía en nosotros para optimizar tus bases de datos y liberar tiempo y recursos para que puedas concentrarte en lo que realmente importa: hacer crecer tu negocio.

    ¡Contáctanos hoy mismo y descubre cómo podemos ayudarte a lograr un rendimiento óptimo en tu entorno de bases de datos!


    Comentarios

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *