No funciona el shrink en SQL Server

Hola a todos, hoy os queremos compartir un misterio que hemos tenido hace poco con un cliente. Todo empieza con un correo indicando que no funciona el shrink. Se intentaba realizar mediante SSMS pero no liberaba. Veamos qué es un shrink y cómo lo hemos resuelto.

¿Qué es un shrink de SQL Server?

Antes de seguir, debemos saber qué es un shrink. Esta operativa consiste en liberar en el disco duro el espacio disponible en la base de datos.

Las bases de datos tienen al menos un fichero de datos, y un fichero de log que va creciendo. Es muy común, que en las tareas de mantenimiento o cargas masivas de datos, el fichero de log crezca. Los ficheros de datos van creciendo por la propia inserción y crecimiento de los datos.

Si se añaden datos, la base de datos crece, pero si se hace un borrado, el espacio ocupado, también baja, ¿verdad? No del todo. Si hacemos un borrado se recupera el espacio «lógico» en la base de datos, pero no en el disco. Para que se recupere espacio en disco hay que realizar un shrink.

¿Por qué no funciona el shrink en SQL Server?

En el caso que estamos abordando, se indicaba por SSMS que un fichero de 110 GB aproximadamente se podía quedar en 1333 MB. Sin embargo este dato era mentira. Tras realizar varios intentos por SSMS y T-SQL, y no funcionar empezamos a investigar.

En ese momento vimos la siguiente query que nos dio la pista:

SELECT name
, size / 128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT) / 128.0 AS AvailableSpaceInMB
FROM sys.database_files;

Esta query devuelve el espacio disponible en MB en el fichero de la base de datos. Sorpresa, los datos no coinciden, por eso no funciona el shrink. El SSMS nos estaba engañando. Indicaba que tenía más de 100 GB libres pero tenía menos de 1 MB disponible. El shrink estaba funcionando bien.

Tras comprobar los datos que realmente estaban en uso se propuso lo siguiente:

no funciona el shrink en SQL Server

  1. Borrar datos antiguos
  2. Realizar mantenimiento de índices
  3. Probar de nuevo el shrink tras liberar este espacio.

Conclusión

Hemos visto para qué se realiza un shrink, y las formas de hacerlo. En esta ocasión SSMS, nos estaba engañando y salió T-SQL y nuestra experiencia al rescate. Si a ti también se te resiste un shrink no dudes en contactar con nosotros. Podemos encargarnos del mantenimiento de base de datos SQL Server para que un shrink no se convierta en un dolor de cabeza.

¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.

Sígue a GPS en LinkedIn

Deja una respuesta

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