Re: intermitente query lenta

From: "Guillermo E(dot) Villanueva" <guillermovil(at)gmail(dot)com>
To: Horacio Miranda <hmiranda(at)gmail(dot)com>
Cc: "Carlos T(dot) Groero Carmona" <ctonetg(at)gmail(dot)com>, pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: intermitente query lenta
Date: 2025-02-19 15:29:21
Message-ID: CANm+PCBBgCKUgFqjS6XdPyxSiGcDJWCmhny2LpedGbC59EELqw@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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 (<hmiranda(at)gmail(dot)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 <
> guillermovil(at)gmail(dot)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 <
> ctonetg(at)gmail(dot)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
>>
>
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jose Mario Trujillo 2025-03-04 05:14:46 Crear un trigger en alter table.
Previous Message Guillermo E. Villanueva 2025-02-19 15:19:25 Re: borrado de archivos WAl