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.