Jose Alberto Sanchez Nieto escribió:
> Hola, ¿el analyze necesita que no haya transacciones pendientes como
> el idle transaction?, creía que era el vacum full el que necesitaba
> que no hubiese transacciones pendientes pero con el analyze si que
> se podía.

Si una transacción queda abierta tomando locks que entran en conflicto
con el lock que adquiere vacuum, naturalmente se va a quedar pegado.
Vacuum toma un lock que es bien liviano; no entra en conflicto con
SELECT, INSERT, UPDATE, etc.  Pero sí entra en conflicto con otras cosas
como ALTER TABLE, o incluso otro VACUUM en la misma tabla.

VACUUM FULL toma un lock más agresivo, que bloquea incluso SELECT.

Nota: VACUUM y ANALYZE son dos operaciones independientes y separadas.
Existe una opción a VACUUM que es la opción ANALYZE, que hace ambas
cosas simultáneamente.  Puedes ejecutar VACUUM <tabla> y va a hacer sólo
un vacuum normal.  Puedes ejecutar ANALYZE <tabla> y va a hacer sólo un
analyze.

> La aplicación trabaja con hibernate y este el el que hace
> las consultas, he comprobado que haciendo desde la aplicación un
> simple select no sé como lo genera hibernate pero ya veo en el
> postgres un idle transaction para ese select, ahí ejecuto el analyze
> y se queda bloqueado, mato la sesión y continua. ¿Hay algún
> parámetro que pueda ejecutar antes del analyze para terminar con
> todas estos idle transaction y que se ejecute el analyze
> correctamente?

Creo que debes examinar el código con cuidado para que no queden
transacciones abiertas en ningún momento, y particularmente si tienen
locks.

-- 
Alvaro Herrera      Valdivia, Chile           Geotag: -39,815 -73,257
"Hoy es el primer día del resto de mi vida"
--
TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net

Responder a