Consulta el tamaño de las tablas en SQL Server

Cuando estamos analizando por qué una base de datos ocupa mucho espacio, una forma de investigarlo es visualizar el tamaño que ocupa cada tabla.

Esto puede obtenerse fácilmente con una consulta como esta:

USE [NombreBD] -- reemplazar nombre base de datos
GO
SELECT
s.Name AS SchemaName,
t.Name AS TableName,
p.rows AS RowCounts,
CAST(ROUND((SUM(a.used_pages) / 128.00), 2) AS NUMERIC(36, 2)) AS Used_MB,
CAST(ROUND((SUM(a.total_pages) - SUM(a.used_pages)) / 128.00, 2) AS NUMERIC(36, 2)) AS Unused_MB,
CAST(ROUND((SUM(a.total_pages) / 128.00), 2) AS NUMERIC(36, 2)) AS Total_MB
FROM sys.tables t
INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
GROUP BY t.Name, s.Name, p.Rows
ORDER BY s.Name, t.Name
GO 


Tengamos en cuenta que las bases de datos de SQL Server Express solo pueden ocupar hasta 10 GB de espacio por lo tanto es importante monitorear este dato.

SQL Table Size Query

Cómo reducir el tamaño del archivo de Log de SQL Server

SI nuestro archivo de log es muy grande probablemente tengamos problemas con el espacio en el disco más pronto que tarde.

Si nuestra base de datos tiene muchas transacciones pero maneja poco volumen de datos, es común que tengamos un archivo de datos (.mdf) relativamente pequeño y un archivo de log bastante más grande (.ldf).

Una de las operaciones más comunes para achicar el tamaño del archivo de log es recurrir a la opción Tasks > Shrink > Files del SQL Server Management Studio.

En la lista File type escogeremos entonces Log y luego nos mostrará en Available free space cuanto espacio se puede liberar. Para ejecutar la operación, hacer click en OK.

Sin embargo, es posible que ejecutes la operación Shrink File pero el tamaño del log no se reduce.

En este caso hay una alternativa que podemos emplear en el caso de bases de datos que NO son de producción: Para esto hacemos click derecho sobre la base de datos y elegimos Properties y luego Options. En la opción Recovery Mode nos aseguramos que diga Simple (no Full). Luego procedemos a hacer el Shrink como explicamos arriba.

Alternativamente podemos ejecutarlo en Transact-SQL:

ALTER DATABASE mydatabase SET RECOVERY SIMPLE
DBCC SHRINKFILE (mydatabase_Log, 1)

Tengamos en cuenta que el Recovery Mode afecta la posibilidad de restaurar una base en el futuro ya que en los logs se guarda la información de todas las transacciones. Si queremos poder volver a restaurar la base a un estado pasado en el futuro, tenemos que asegurarnos de hacer una copia de seguridad del archivo de log.