Determinar el espacio usado por cada tabla de una Base de Datos especifica


Cuando trabajamos con muchas tablas dentro de una misma base de datos y requerimos hacer mantenimientos con estimación de tiempos, nos vendría bien saber antes de comenzar cualquier tarea, con que volumen de datos nos vamos a enfrentar, aunque normalmente lo estimemos mentalmente, realizando una simple consulta, podemos obtener toda la información necesaria para planificar mejor nuestro trabajo.

USE BBDD_Analizar
GO

DECLARE @table_name VARCHAR(500)  
DECLARE @schema_name VARCHAR(500)  
DECLARE @tab1 TABLE( 
        tablename VARCHAR (500) collate database_default 
       ,schemaname VARCHAR(500) collate database_default 
) 

CREATE TABLE #temp_Table ( 
        tablename sysname 
       ,row_count INT 
       ,reserved VARCHAR(50) collate database_default 
       ,data VARCHAR(50) collate database_default 
       ,index_size VARCHAR(50) collate database_default 
       ,unused VARCHAR(50) collate database_default  
) 

INSERT INTO @tab1  
SELECT Table_Name, Table_Schema  
FROM information_schema.tables  
WHERE TABLE_TYPE = 'BASE TABLE' 

DECLARE c1 CURSOR FOR 
SELECT Table_Schema + '.' + Table_Name   
FROM information_schema.tables t1  
WHERE TABLE_TYPE = 'BASE TABLE' 

OPEN c1 
FETCH NEXT FROM c1 INTO @table_name 
WHILE @@FETCH_STATUS = 0  
BEGIN   
        SET @table_name = REPLACE(@table_name, '[','');  
        SET @table_name = REPLACE(@table_name, ']','');  

        -- make sure the object exists before calling sp_spacedused 
        IF EXISTS(SELECT id FROM sysobjects WHERE id = OBJECT_ID(@table_name)) 
        BEGIN 
               INSERT INTO #temp_Table EXEC sp_spaceused @table_name, false; 
        END 
        FETCH NEXT FROM c1 INTO @table_name 
END 
CLOSE c1 
DEALLOCATE c1 

SELECT  t1.* 
       ,t2.schemaname  
FROM #temp_Table t1  
INNER JOIN @tab1 t2 ON (t1.tablename = t2.tablename ) 
ORDER BY row_count DESC; 
DROP TABLE #temp_Table

En esta oportunidad, me encontré con la necesidad de experimentar un escenario de Data Compression by Page en una base de Warehouse que ocupa un poco mas de 150Gb.
En primer instancia, me ayudo a limitar las tablas a comprimir, como así también, tomar el tiempo que demora en una tabla promedio.

Deja un comentario