Extrañamente no volvimos a tener el problema de lentitud!!! fue solo ese
día y nunca mas!!
De todas maneras hice un script que lo dejo acá por si a alguien le sirve,
tomando la sugerencia de Horacio.

#!/bin/bash

TMP_FILE="/tmp/explain_tmp_$$.log"
LOG_FILE="/home/postgres/data/test.log"

START_TIME=$(date +%s)

/usr/local/pgsql/bin/psql -d iurixprod -c "$(cat
/home/postgres/data/test.sql);" > "$TMP_FILE" 2>&1

END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))

# Si la consulta tardó más de 10 segundos, registrar en el log
if [ "$DURATION" -gt 10 ]; then
    echo -e "\n=============================" >> "$LOG_FILE"
    echo "Consulta lenta detectada ($DURATION segundos) - $(date '+%Y-%m-%d
%H:%M:%S')" >> "$LOG_FILE"
    cat "$TMP_FILE" >> "$LOG_FILE"

    # Agregar cantidad de sesiones activas
    echo -e "\n--- Sesiones activas en el momento ---" >> "$LOG_FILE"
    psql -d nombre_de_tu_bd -t -c "SELECT count(*) FROM pg_stat_activity
WHERE state = 'active';" >> "$LOG_FILE" 2>&1
    echo "=============================" >> "$LOG_FILE"

    echo "Consulta lenta registrada en $LOG_FILE"
fi

# Eliminar archivo temporal
rm -f "$TMP_FILE"


El mar, 18 feb 2025 a las 6:38, Horacio Miranda (<hmira...@gmail.com>)
escribió:

> Y hacer un script que guarde el explain (buffers,analyze) select … cuando
> el time se demore mas de 10 segundos ?
>
> Lo corres a cada rato y de esa forma capturas el plan malo vs el plan
> bueno ?
>
> Algo como  Lo dejas corriendo en el crontab, sera un poco pesado pero
> puede darte luces del plan que esta siguiendo.
>
> #!/bin/bash
> FILE=/tmp/output_$(date +%Y%m%d%H%M)”.log
>
> SECONDS=0
> psql < consulta.sql > /tmp/output.txt
> if [ $SECONDS -gt 10 ]  ; then
>   cp /tmp/output.txt $FILE
>   echo “Revisar $FILE
> fi
>
>
>
> On 18 Feb 2025, at 3:59 PM, Guillermo E. Villanueva <
> guillermo...@gmail.com> wrote:
>
> Gracias por tu comentario, si puse la query, no usa prepare, va directo.
>
>
> El El lun, 17 feb 2025 a la(s) 23:57, Carlos T. Groero Carmona <
> cton...@gmail.com> escribió:
>
>> Si, si estas usando prepared statements puede pasar, recisa esto:
>> plan_cache_mode
>>
>> El valor por default is auto, trata de cambiarlo a forced_custom_plan
>>
>> Regards,
>> Carlos
>>
>
>

Reply via email to