El otro día, en el proyecto donde estoy trabajando ahora, me encontré con la siguiente situación: en una base de datos SQL Azure, sobre una tabla que tenía más de 10 millones de registros, necesito crear un índice para optimizar una serie de consultas. La tabla, contiene cerca de 100 campos y en el índice quiero incluir un número importante de ellos (unos 25).

El resultado inicial, después de 15 minutos, es el siguiente:

Msg 40552, Level 20, State 1, Line 1
The session has been terminated because of excessive transaction log space usage. Try modifying fewer rows in a single transaction.
Msg 0, Level 20, State 0, Line 0
A severe error occurred on the current command. The results, if any, should be discarded.

El problema lo entiendo perfectamente: estoy consumiendo mucho log de transacciones por que la tabla tiene muchas filas y estoy creando un índice bastante grande, pero… ¿¡QUE HAGO!?, yo necesito ese índice. Estos errores se enmarcan dentro de los errores de transitorios SQL Azure (en concreto de pérdida de conexión).

Bien, dando una vuelta por la documentación de los errores (muy buena por cierto) veo que menciona que a la hora de reconstruir un índice puedes utilizar la opción “WITH (ONLINE=ON)”. Pues no sólo vale para “reconstruir”, también vale para crear nuevos índices o borrar existentes.

Ale, problema resuelto.