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
>>
>
>
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 |