Obtener el tamaño de todas las tablas en la base de datos

Resuelto Eric asked hace 13 años • 28 respuestas

Heredé una base de datos SQL Server bastante grande. Parece ocupar más espacio del que esperaría, dados los datos que contiene.

¿Existe una manera sencilla de determinar cuánto espacio en el disco consume cada tabla?

Eric avatar Oct 25 '11 23:10 Eric
Aceptado
SELECT 
    t.name AS TableName,
    s.name AS SchemaName,
    p.rows,
    SUM(a.total_pages) * 8 AS TotalSpaceKB, 
    CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
    SUM(a.used_pages) * 8 AS UsedSpaceKB, 
    CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB, 
    (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,
    CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB
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
LEFT OUTER JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
WHERE 
    t.name NOT LIKE 'dt%' 
    AND t.is_ms_shipped = 0
    AND i.object_id > 255 
GROUP BY 
    t.name, s.name, p.rows
ORDER BY 
    TotalSpaceMB DESC, t.name
marc_s avatar Oct 25 '2011 16:10 marc_s

Si está utilizando SQL Server Management Studio (SSMS), en lugar de ejecutar una consulta ( que en mi caso devolvió filas duplicadas ), puede ejecutar un informe estándar

  1. Haga clic derecho en la base de datos
  2. Vaya a Informes > Informes estándar > Uso de disco por tabla

Nota: El nivel de compatibilidad de la base de datos debe establecerse en 90 o superior para que esto funcione correctamente. Consulte http://msdn.microsoft.com/en-gb/library/bb510680.aspx

Nota: Este informe no está disponible cuando se trabaja con una base de datos SQL de Azure.

Kevin Brydon avatar Apr 24 '2013 13:04 Kevin Brydon

sp_spaceused puede brindarle información sobre el espacio en disco utilizado por una tabla, una vista indexada o toda la base de datos.

Por ejemplo:

USE MyDatabase; GO

EXEC sp_spaceused N'User.ContactInfo'; GO

Esto informa la información de uso del disco para la tabla ContactInfo.

Para usar esto para todas las tablas a la vez:

USE MyDatabase; GO

sp_msforeachtable 'EXEC sp_spaceused [?]' GO

También puede obtener el uso del disco desde la funcionalidad de Informes estándar del botón derecho del ratón de SQL Server. Para acceder a este informe, navegue desde el objeto del servidor en el Explorador de objetos, baje al objeto Bases de datos y luego haga clic con el botón derecho en cualquier base de datos. En el menú que aparece, seleccione Informes, luego Informes estándar y luego "Uso de disco por partición: [Nombre de la base de datos]".

Axle avatar Oct 25 '2011 16:10 Axle