es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PostgreSQL 14.2: sin memoria – Falló en la solicitud de tamaño 24576 en el contexto de memoria “TupleSort principal”.

Recientemente he instalado PostgreSQL 14.1 en paralelo con mi antigua versión 12.9 en mi servidor RedHat. Ambas instancias se ejecutan con sus configuraciones predeterminadas. El servidor en sí tiene 48 CPU y 188 GB de RAM, lo que parecía ser más que suficiente para 12.9.

Todo ha funcionado según lo esperado, pero sigo recibiendo un mensaje de error.

“Sin memoria – Error en la solicitud de tamaño 24576 en el contexto de memoria “TupleSort main” Estado SQL: 53200″

Tablas SQL: pos tiene 18 584 522 filas // orderedposteps tiene 18 filas // posteps tiene 18 filas.

“CREATE TEMP TABLE actualpos ON COMMIT DROP AS SELECT DISTINCT lsa.id FROM pos sa JOIN orderedposteps osas ON osas.stepid = sa.stepid JOIN posteps sas ON sas.id = osas.stepid JOIN LATERAL (SELECT innersa.* FROM pos innersa JOIN orderedposteps innerosas ON innerosas.stepid = innersa.stepid WHERE (innersa.id = sa.id) AND (innersa.iscached IS FALSE) AND (innersa.isobsolete IS FALSE) ORDER BY innersa.createdtimestamp DESC, innerosas.stepindex DESC LIMIT 1) lsa ON TRUE LEFT JOIN LATERAL (SELECT innersa.* FROM pos innersa JOIN orderedposteps innerosas ON innerosas.stepid = innersa.stepid WHERE (innersa.id = sa.id) AND (innersa.iscached IS TRUE) AND (innersa.isobsolete IS FALSE) ORDER BY innersa.createdtimestamp DESC, innerosas.stepindex DESC LIMIT 1) sacheck ON TRUE LEFT JOIN orderedposteps osascheck ON osascheck.stepid = sacheck.stepid WHERE ((sacheck IS NULL) OR (sacheck.createdtimestamp < sa.createdtimestamp) OR (osascheck.stepindex < osas.stepindex)) AND (((osas.stepindex < v_laststepindex) AND (sa.isfailure ! = sas.isvalidsum) AND (sa.iscached IS FALSE)) OR ((osas.stepindex = v_laststepindex) AND (sa.iscached IS FALSE))) ORDER BY lsa.createdtimestamp DESC LIMIT 50000”.

La única diferencia que puedo ver es la utilización de RAM, que se muestra en htop.
Mientras que 12.9 solo consume hasta 10 GB de RAM, la versión 14.1 crece hasta 62GB y se bloquea al alcanzar aproximadamente los 62GB.

Ya he intentado aumentar el work_mem con

“ALTER SYSTEM SET work_mem = '4MB'”

También he utilizado pgtune para cambiar algunos otros valores, pero nada tiene un efecto significativo.

Estoy bastante seguro de que la consulta SQL se puede simplificar y ajustar, lo que podría hacer, pero quiero entender dónde está la diferencia entre 12.9 y 14.1, o qué cambiar en la configuración en lugar de refactorizar una función para que funcione con la última versión.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Según la información proporcionada, el problema parece estar relacionado con la diferencia en la utilización de RAM entre PostgreSQL 12.9 y PostgreSQL 14.1. Mientras que el primero consume hasta 10 GB de RAM, el segundo crece hasta 62GB y se bloquea al superar este límite.

    Para abordar este problema, ya se ha intentado aumentar la configuración de work_mem y se ha utilizado pgtune. Sin embargo, estos cambios no tuvieron un efecto significativo.

    Una posible solución para optimizar la consulta SQL es simplificar y ajustar el código, como se mencionó. Sin embargo, también es necesario analizar la diferencia entre las dos versiones de PostgreSQL e identificar cambios de configuración para evitar quedarse sin memoria en PostgreSQL 14.1.

    Una posible razón para la diferencia en la utilización de RAM podría deberse a los cambios en la configuración predeterminada de PostgreSQL 14.1. Por lo tanto, podría ser útil comparar los archivos de configuración de ambas instancias e identificar cualquier diferencia que pudiera llevar al problema.

    Otra opción es utilizar las funciones de gestión de recursos de PostgreSQL, como max_worker_processes, max_parallel_workers_per_gather y shared_buffers, para administrar el uso de memoria. Estas configuraciones pueden limitar la cantidad de procesos e hilos que pueden usar memoria, así como especificar la cantidad máxima de memoria que PostgreSQL puede usar.

    En conclusión, para abordar el problema de falta de memoria en PostgreSQL 14.1, es necesario investigar tanto la optimización de la consulta SQL como los cambios de configuración para administrar el uso de memoria.

Comments are closed.