El 08/02/2010 21:08, Andrés P.P. escribió:
Hola!
Perdonen lo extenso..Creo tener la solución al siguiente problema pero
lo quiero validar con Uds. antes de aplicarlo.
Tengo una BD pequeña en la cual hay 4 tablas que tiene actividad cada
10 minutos que incluyen update y delete y en las cuales se ejecuta un
vacuum en cada uno de esos ciclos (10 minutos).... no ha sido
necesario configurar un autovacuum ya que el nivel de carga es bajo.
La BD en general funciona bien, sin embargo en esta actividad que se
da cada 10 minutos existe la siguiente linea:
*vacuum full analyze bd_catalog.tab_tmp_carga; <-- esta tabla se vacía
y carga en cada ciclo...poca data..*
..su ejecución está enviando el siguiente error:
*ERROR: duplicate key violates unique constraint
"pg_statistic_relid_att_index"*
al truncar la tabla SÍ puedo realizar el vacuum sin problemas, pero en
cuanto ingresa data vuelve a aparecer el error al momento del vacuum..
También intenté borrar la tabla , pero me dio error:
*drop table bd_catalog.tab_tmp_carga;
ERROR: cache lookup failed for relation 41335
*
Al revisar el contenido de la tabla pg_statistic me encuentro con lo
siguiente:
*/select starelid,staattnum, count(*) from pg_statistic group by
starelid,staattnum having count(*)>1;
starelid | staattnum | count
----------+-----------+-------
16918 | 1 | 2
16918 | 3 | 2
16927 | 2 | 2
16927 | 3 | 2
16927 | 4 | 2
/*
Como decía, la carga es baja y la aplicación sigue funcionando "bien",
sin embargo me preocupa que no se esté realizando el vacuum porque a
la larga empezará a afectar el desempeño. Hace unos años atrás me pasó
algo similar y lo que hice fue recrear la BD, cargar un respaldo del
momento con la data y ejecutar los vacuum sobre los objetos necesarios
y listo... fueron unos 10 minutos en todo el proceso y desde entonces
no se habían presentado problema. Sin embargo, ahora quiero aplicar
una solución que sea más correcta de acuerdo a lo que Uds. me
confirmen o me indiquen.
Solución:
Googleando me encontré con la siguiente solución:
*/delete from pg_statistic;
reindex table pg_statistic;
vacuum analyze;
/*
... no he querido traerme un full backup para ver si se trae el error
consigo y probar la solución en desarrollo.
En fin..
Consultas:
Si hago lo que encontré en google estaría eliminando todas las
estadísticas... cierto??.. es posible solo borrar lo que necesite
para la tabla con el problema en particular??... cómo hago esa
asociación?.... es necesario el reindex en caso que el delete sea
parcial??.. Finalmente, el "vacuum analyze" lo podría reemplazar por
el vacuum que uso sobre la tabla del problema solamente.
Estoy claro que independiente de la solución... hay un problema en la
aplicación que está causando esta corrupción... pero eso lo dejaré
para otra futura consulta ya que trata sobre replicación...(pero
insisto..es otro cuento..).
Gracias desde ya.. y nuevamente, perdonen lo extenso.
Saludos
Andrés
Te pregunto algo. ¿Si tienes pocos UPDATES/INSERT/DELETE por qué existe
la necesidad de ejecutar VACUUM ANALYZE cada 10 mins?
Realmente no veo por qué. VACUUM se usa frecuentemente cuando existen
muchas consultas DML, pero el tiempo que veo acá, es muy pequeño a mi
entender, y no hay necesidad de hacer eso en ese tiempo.
No recomiendo borrar el contenido de pg_statitic, ya que puede servirte
de mucho, además que ayuda al optimizador para la ejecución del plan de
las consultas; por lo que estarías trabajando sin estadísticas, por lo
que el optimizador pudiera no trabajar correctamente. No tengo mucho
conocimiento del tema, pero al menos es lo que creo.
Mi recomendación sería incrementar el tiempo de ejecución de VACUUM ANALYZE
Saludos
--
--------------------------------------------------------------------------------
"Para ser realmente grande, hay que estar con la gente, no por encima de ella."
Montesquieu
Ing. Marcos Luís Ortíz Valmaseda
PostgreSQL System DBA&& DWH -- BI Apprentice
Centro de Tecnologías de Almacenamiento y Análisis de Datos (CENTALAD)
Universidad de las Ciencias Informáticas
Linux User # 418229
-- PostgreSQL --
"TIP 4: No hagas 'kill -9' a postmaster"
http://www.postgresql-es.org
http://www.postgresql.org
http://www.planetpostgresql.org
-- DWH + BI --
The Data WareHousing Institute
http://www.tdwi.org
http://www.tdwi.org/cbip
---------------------------------------------------------------------------------