viernes, 30 de abril de 2010

Espacio ocupado por tablas en Sql Server

Si queremos saber cuales tablas tienen espacio desperdiciado o cual es la tabla más grande, se puede utilizar el siguiente procedimiento almacenado.

-- Create the temporary table...
CREATE TABLE #tblResults
(
[name] nvarchar(20),
[rows] int,
[reserved] varchar(18),
[reserved_int] int default(0),
[data] varchar(18),
[data_int] int default(0),
[index_size] varchar(18),
[index_size_int] int default(0),
[unused] varchar(18),
[unused_int] int default(0)
)

-- Populate the temp table...
EXEC sp_MSforeachtable @command1=
"INSERT INTO #tblResults
([name],[rows],[reserved],[data],[index_size],[unused])

EXEC sp_spaceused '?'"

-- Strip out the " KB" portion from the fields
UPDATE #tblResults SET
[reserved_int] = CAST(SUBSTRING([reserved], 1,
CHARINDEX(' ', [reserved])) AS int),
[data_int] = CAST(SUBSTRING([data], 1,
CHARINDEX(' ', [data])) AS int),
[index_size_int] = CAST(SUBSTRING([index_size], 1,
CHARINDEX(' ', [index_size])) AS int),
[unused_int] = CAST(SUBSTRING([unused], 1,
CHARINDEX(' ', [unused])) AS int)

-- Return the results...
SELECT * FROM #tblResults

Se puede obtener tablas que tienen espacio desperdiciado....

Ejemplo: SELECT * FROM #tblResults where unused_int > 20000

Si queremos saber el espacio total utilizado de la base y el espacio libre, ejecutamos el siguiente procedimiento.

EXEC sp_spaceused

En muchas ocasiones cuando miramos desde el Administrador Corporativo, y nos informa que existe un espacio no utilizado muy grande y si ejecutamos la consulta anterior y totalizamos el espacion no utilizado nos da un valor diferente. A fin de actualizar esta información podemos ejecutar el procedimiento sp_spaceused con la opción de actualizar estadísticas.

EXEC sp_spaceused @updateusage = 'TRUE'



fuente: http://oberdata.com.ar/pred/blogs/ob/archive/2007/05/06/31157.aspx

No hay comentarios: