Lo primero para empezar el trabajo con SQL Server es preparar el ambiente. La instalación…
Recuperar espacio en base de datos con SHRINK. ¿Sí o no?
Alcanzaste un límite, generaste errores o simplemente temes quedarte sin recursos en disco. Lo que quieres es recuperar espacio en base de datos y has visto por allí que ejecutando el comando SHRINK puedes salir de esa situación incómoda.
Si has enfrentado alguno de esos escenarios, déjame decirte que es posible que estés haciendo algo mal.
¿Por qué recuperar espacio en base de datos?
Si tienes esta necesidad en algún momento, seguramente has cometido alguno de estos errores.
- Mal diseño de tablas (tipos de datos innecesariamente grandes).
- Consultas muy grandes que hayan generado un crecimiento del log de transacciones.
- Sobrecarga de la base de datos tempdb.
- Uso inadecuado de configuraciones de FILLFACTOR en índices.
- Tareas de mantenimiento acumuladas.
Errores que podrían haberse evitado. Algunos de ellos con:
- Evitar el crecimiento del log en operaciones de DELETE
- Mejores prácticas en tempdb de SQL Server
- O simplemente con mejor diseño o mejor Testing
¿Qué problema con DBCC SHRINKDATABASE?
Si necesitas usar este comando es porque alguno de los errores señalados están siendo o han sido generados. Pueden evitarse.
DBCC SHRINKDATABASE es una operación costosísima y puede llevar a tu base de datos a quedarse fuera de línea. No lo digo yo, está escrito como nota aclaratoria en la documentación oficial del comando.
Es más, puedes aplicarlo incluso sin recibir el resultado esperado. En versiones antiguas de SQL Server incluso podías dejar una base de datos en estado corrupto.
Puedes recuperar espacio físico que después de poco tiempo vuelve a llenarse. (Muy común). Lo que quiere decir que tienes operaciones que realmente necesitan ese espacio. Entonces…SHRINK no es tu solución.
No mantiene el porcentaje de fragmentación de tus índices. En general ¡LOS INCREMENTA!
¿Y qué es lo peor?
Que muchas personas siguen creyendo que hacer un SHRINK es una tarea normal, una tarea de mantenimiento, una operación regular.
Si hacer SHRINK es normal, entonces…Hagamos una tarea programada que haga esta tarea, ¿verdad? ¡Claro que sí! (–nótese el sarcasmo).
Sigamos con las desgracias. La opción AUTO SHRINK como configuración de base de datos. (No tengo que explicar más ¿cierto?). Esta opción nunca debió salir a la luz y de verdad espero que no la tengas habilitada.
…Esta historia continuará…