Como reduzco mi log de transacciones

Como reduzco mi log de transacciones

Si te haces esta pregunta estás ante lo más común cuando comienzas a administrar SQL, la respuesta fácil sería darte dos comandos, y que luego funcionen o no. La verdad no me interesa eso en absoluto, creo que debes entender como funciona el log para saber porque crece, así entenderás porque aunque hagas backups todas las noches tu log sigue creciendo, y además, y mucho mejor sabrás como evitar que crezca si no tiene que hacerlo.

Para comenzar, que el log crezca depende directamente del modo de recuperaci├│n que tenga tu base de datos, solo en los modos FULL y BULK LOGGED crecer├í sin medida (tambi├®n puede crecer en el modo simple, es mucho m├ís raro pero puede suceder, en 3 lineas veremos porqu├®).

El modo de recuperaci├│n de la bbdd puedes verlo en las propiedades (SQL Server Management Studio, te conectas al relacional, propiedades.. y en la pessta├▒a opciones aparece el modo de recuperaci├│n actual y en el desplegable el resto de modos. Yo tengo el cliente en ingl├®s, as├¡ que disculpadme pero lo vereis en ingl├®s

 

┬áEl log de transacciones se encarga de registrar una tras otras de forma secuencial todas las modificaciones que se producen en la base de datos, esto┬áes, la informaci├│n que despu├®s ha de consolidarse en las tablas.┬á De esta forma el fichero MDF┬á (o los NDF’s ) no tienen porque contenter toda la informaci├│n actualizada en un momento dado. As├¡ pues, hagais lo que hagais NO BORREIS EL FICHERO DE LOG, que adem├ís de ser una barvaridad, os har├í seguramente tener inconsistencias en la base de datos. Es m├ís no se puede recuperar sin un comando totalmente indocumentado que usa soporte de microsoft.

Si es una estructura secuencial, y registra los cambios ┬┐debe crecer infinitamente?, la respuesta es depende, depende del modo de recuperaci├│n , si estamos en modo simple, en cuanto un proceso de baja prioridad que tiene SQL consolida la informaci├│n del log en los datos pasa y salvaguarda los datos, esa informaci├│n se puede sobre-escribir. ┬┐hay excepciones? SI, no se puede sobreescribir si hay una transacci├│n antigua abierta, es decir si alguien hace, BEGIN TRAN, Update┬áTabla SET Campo=VAlor WHERE condicion, y se olvida de ejecutar el COMMIT TRAN o el ROLLBACK, sql no puede rehusar el trozo de log, porque no sabe que va a pasar con esa transacci├│n y por tanto el fichero seguir├í creciendo…┬á Si el modo de recuperaci├│n es sencillo se puede reaprovechar el log, como acabamos de ver, sin embargo, si algo falla, solo podremos recuperar el ├║ltimo backup completo (ning├║n backup del log puede garantizar que no se hallan reaprovechado trozos, y por tanto son in├║tiles, tanto que SQL no deja ni hacerlos :)).

En el modo de recuperación completo y bulk logged solo se reaprovecharán estos trozos, si además de no quedar transacciones antiguas abiertas, se ha hecho copia de seguridad DEL LOG, es decir no BACKUP DATABASE sino BACKUP LOG.

Así pues ¿porque crece mi log de transacciones?,

Puede ser porque : Tienes una transacción muy antigua abierta (compruebalo con DBCC OPENTRAN en la BBDD que quieras hacer la operación), el comando devolverá algo así

Transaction information for database ‘AdventureWorks2008’.

Oldest active transaction:

SPID (server process ID): 53

UID (user ID) : -1

Name : user_transaction

LSN : (33:452:2)

Start time : Jan 5 2010 1:34:24:870AM

SID : 0x0105000000000005150000006ae2268ca3bb996b6e0e17c6e8030000

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

 Si no es esto ni la hubo, puede ser porque no hayas hecho nunca copias de seguridad del log de transacciones, en cuyo caso no se reaprovecha el trocito del log.

Bueno, ya sabes porque crece, pero ya ha crecido y ahora ┬┐como lo reduzco?.

Bueno, el tama├▒o del log depende del uso de la BBDD as├¡ que no hay una regla fija, pero vamos entre el 5 y el 40% de la BBDD es “aceptable” m├ís es muy grande, y menos es muy raro, lo normal entre el 10% y el 15%, aunque insisto, que esto no te obsesione, que no hay reglas fijas.

Si tu tama├▒o es demasiado grande, reducirlo puede ser una tarea sencilla, prueba los siguientes pasos :

1.- Cambia a modo de recuperaci├│n Simple

2.- Ve al men├║ shrink y reduce el fichero de la bbdd.

¿puede que no se reduzca ni aún así? Si, puede que no se reduzca, el log es una estructura circular y no quita espacio del principio del fichero, sino solo del final así pues lo suyo es que reorganize las páginas antes.

Con esto en principio debiera reducirse, ahora, para que no vuelva a crecer, recuerda, o bien modo de recuperación sencillo (tendrá el tamaño de la transacción abierta que más haya durado y en la que concurrentemente más cosas se hayan hecho) o bien modo completo pero con copias de seguridad frecuentes. (varias al dia es lo habitual).

Saludos

5 Comentarios en “Como reduzco mi log de transacciones

  1. Una explicacion muy interesante, ahora una preguntita sobre el LOG.. ya sabes Miguel es dificil quedarte con la frase en la mente…. “Es m├ís no se puede recuperar sin un comando totalmente indocumentado que usa soporte de microsoft” …. Y cual es?

    saludos Tio eres un Crack!!!
    ByTriKi

  2. DBCC REBUILD_LOG es el comando para antes de 2005, de 2005 en adelante, si alguna vez lo necesitas, ponme un mail e intento localizarlo, lo us├® alguna vez, pero no me acuerdo de memoria…

  3. Hola a todos, una pregunta y si la BBDD esta en recuperaci├│n simple y despues de reorganizar indices a crecido tanto al BBDD como el registro de transacciones. ┬┐ Sabeis como truncar el registro? Porque como ha comentado Miguel ni te deja SQL, pero el caso es que crece y crece.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *