lunes, 17 de mayo de 2010

Actualizar estadisticas Informix

El problema que estoy teniendo es que tenía una tabla que la cargaba en un solo proceso y esto cargaba 16 millones de registros.

La clave de esta tabla era los 2 primeros registros y luego tenia uno de datos que era un VarChar de 800.

El problema es que al procesar algo de la tabla que comentaba, que es decir al hacer un select sobre esta tabla, como las estadísticas no estaban actualizadas, el motor informix, no se daba cuenta que la tabla tenia 16millones de registros y se pensaba que tenia 0 registros, entonces no utilizaba el índice que debía, ya que le motor suponía que al tener tan pocos registros, que no utilizara índices sino directamente recorra la tabla entera.

Esto lo que pasaba era que utilizaba demasiado espacio tanto en los temporales como en los logs de informix, lo cual hacia que mi aplicación se cayera y dijera que no tenia espacio para procesar esto.

Antes de actualizar las estadísticas, hacer un count de la tabla migración me demoraba aprox 20 minutos, luego de actualizar las estadísticas me demora un minuto y poquito.

Entonces el comando para actualizar las estadísticas de informix es el siguiente:

UPDATE STATISTICS LOW FOR TABLE nombreTabla; (ejecución muy rápida, estadísticas poco detalladas, planes de ejecución adecuados)

UPDATE STATISTICS MEDIUM FOR TABLE nombreTabla; (ejecución relativamente rápida, estadísticas confiables, planes de ejecución buenos)

UPDATE STATISTICS HIGH FOR TABLE nombreTabla; (ejecución muy costosa, estadísticas con máximo detalle, planes de ejecución óptimos)

Si se esta ejecutando esto desde genexus, se debe de poner adelante SQL, y poner este código en algún procedimiento.

No hay comentarios: