Un fallo en la gestión de memoria de PostgreSQL provocó una interrupción del clúster de producción de una empresa, consumiendo 2 TB de RAM. El problema, identificado por la experta Henrietta Dombrovskaya, no se debió a un error en el código de PostgreSQL, sino a una combinación de una consulta mal estructurada que generaba una gran cantidad de operaciones de hash y ordenación, y el comportamiento por diseño de PostgreSQL de liberar la memoria de los contextos de ejecución al final de la operación completa, acumulando así una gran cantidad de memoria. Para diagnosticar el problema, se utilizó la función pg_log_backend_memory_contexts, recientemente introducida en PostgreSQL 14, que permite registrar el árbol de memoria de un proceso backend. La solución pasa por optimizar las consultas, mejorar las estadísticas para que el planificador haga mejores decisiones y, en última instancia, evitar el uso de funciones como si fueran tablas en joins. El incidente subraya que la potencia del hardware no puede compensar una consulta mal escrita y resalta la importancia de comprender el comportamiento interno de PostgreSQL para evitar problemas de memoria.
