jueves, 10 de mayo de 2018

Listar las tablas de una base de datos, su tamaño en disco, de los datos e indices

Posted by InfoTacticas Soluciones  |  No comments

Para listar las tablas de una base de datos con información de su tamaño en disco, de los datos e indices y del número de filas se puede hacer uso del siguiente script:

--
--

--

--Cursor que contiene todos los objetos que ocupan espacio
DECLARE objects_cursor CURSOR LOCAL FAST_FORWARD READ_ONLY for
      SELECT s.name + '.' + o.name from sys.schemas s
      INNER JOIN sys.objects o
      ON o.schema_id = s.schema_id
      WHERE
            o.type = 'S' or --Tablas de sistema
            o.type = 'U' or --Tablas de usuario
            o.type = 'V' or --Vistas (solo las indexadas devuelven tamaño)
            o.type = 'SQ' or --Cola de servicio
            o.type = 'IT' -- Tablas internas usadas p.e. por el Service Broker o los indices XML
--Tabla temporal para albergar los resultados
CREATE TABLE #results
      (name_with_schema SYSNAME,
   name SYSNAME, rows CHAR(11),
      reserved VARCHAR(18), data VARCHAR(18),
      index_size VARCHAR(18),Unused VARCHAR(18))

DECLARE @resultado AS TABLE
      (name SYSNAME, rows CHAR(11),
      reserved VARCHAR(18), data VARCHAR(18),
      index_size VARCHAR(18),Unused 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 @resultado
            EXEC sp_spaceused @object_name
   
   INSERT INTO #results
   SELECT @object_name, x.* 
   from @resultado as x

   delete from @resultado
   
      FETCH NEXT FROM objects_cursor
            INTO @object_name;    
END;
CLOSE objects_cursor;
DEALLOCATE objects_cursor;
-- Quitamos "KB" para poder ordenar
UPDATE
  #results
SET
  reserved = LEFT(reserved,LEN(reserved)-3),
  data = LEFT(data,LEN(data)-3),
  index_size = LEFT(index_size,LEN(index_size)-3),
  Unused = LEFT(Unused,LEN(Unused)-3)
--Ordenamos la información por el tamaño ocupado
SELECT
  name_with_schema,
  Name,
  reserved AS [Tamaño en Disco (KB)],
  data AS [Datos (KB)],
  index_size AS [Indices (KB)],
  Unused AS [No usado (KB)],
  Rows AS Filas FROM #results
ORDER BY
    name_with_schema,
 name,
  CONVERT(bigint, reserved) DESC

drop table #results


5/10/2018 12:11:00 a. m. Share:

0 comentarios:

Get updates in your email box
Complete the form below, and we'll send you the best coupons.

Deliver via FeedBurner
back to top