Obtener el espacio usado por tablas, vistas e indices en base de datos SQL Server


Para visualizar el espacio usado por las tablas,indices y vistas, hacemos uso del procedimiento almacenado sp_spaceused, el cual muestra la cantidad de filas, la cantidad de espacio reservado en KB, el tamaño de datos en KB, el espacio usado por los indices de la tabla en KB y el espacio no utilizado en KB.

Para visualizar el espacio utilizado por la tabla clientes.


EXEC sp_spaceused 'clientes'


Si se omite el parámetro, el procedimiento almacenado muestra el espacio utilizado por la base de datos actual.


EXEC sp_spaceused


Para optimizar el proceso dejo el procedimiento almacenado que lista todas las tablas y vistas.



CREATE  PROCEDURE USP_OBTENER_ESTADISTICA_TABLAS
AS
BEGIN

/*===============================*/
/* Estadistica Tablas            */
/*===============================*/
       DECLARE @SQL AS VARCHAR(255)
       DECLARE @TOTAL DECIMAL(18,0)

       --Cursor que contiene todos los objetos que ocupan espacio
       DECLARE objects_cursor CURSOR LOCAL FAST_FORWARD READ_ONLY FOR
      
             SELECT NAME FROM sysobjects o
             WHERE  o.xtype = 'U' or
                    o.xtype = 'V'
      
      
       --Tabla temporal para albergar los resultados
       CREATE TABLE #results
       (     Nombre SYSNAME,
             Filas CHAR(11),
             Reservado VARCHAR(18),
             Datos VARCHAR(18),
             Tamano_Indice VARCHAR(18),
             Libre VARCHAR(18)
       )
       --Recorremos el cursor obteniendo la información de espacio ocupado
       DECLARE @object_name AS SYSNAME
      
       OPEN objects_cursor
      
       FETCH NEXT FROM objects_cursor INTO @object_name;
       WHILE @@FETCH_STATUS = 0
       BEGIN
             INSERT INTO #results (Nombre,Filas,Reservado,Datos,Tamano_Indice,Libre)
             EXEC sp_spaceused @object_name
      
             FETCH NEXT FROM objects_cursor INTO @object_name;
       END
      
       CLOSE objects_cursor;
       DEALLOCATE objects_cursor;
      
       -- Quitamos "KB" para poder ordenar
       UPDATE #results 
       SET    Reservado = LEFT(Reservado,LEN(Reservado)-3),
              Datos = LEFT(Datos,LEN(Datos)-3),
              Tamano_Indice = LEFT(Tamano_Indice,LEN(Tamano_Indice)-3),
              Libre = LEFT(Libre,LEN(Libre)-3)
      
       --Ordenamos la información por el tamaño ocupado
       SELECT      
             Nombre,
             Reservado AS [Tamaño en Disco (KB)],
             Datos AS [Datos (KB)],    
             Tamano_Indice AS [Indices (KB)],
             Filas AS Filas_Total
       FROM #results
       ORDER BY CONVERT(bigint, Reservado) DESC
      
       --Eliminar la tabla temporal
       DROP TABLE #results
END