miércoles, 11 de septiembre de 2019
SQL SERVER | Tamaño de Tablas en Base de Datos
--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 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 #results
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 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,
reserved / 1024 AS [Tamaño en Disco (MB)],
data / 1024 AS [Datos (MB)],
index_size / 1024 AS [Indices (MB)],
unused / 1024 AS [No usado (MB)],
rows AS Filas
FROM #results
ORDER BY CONVERT(BIGINT, reserved) DESC
DROP TABLE #results
Suscribirse a:
Entradas (Atom)