Código de SQL - Información sobre los elementos que mas ocupan en SQL SERVER

Información sobre los elementos que mas ocupan en SQL SERVERgráfica de visualizaciones


SQL

estrellaestrellaestrellaestrellaestrella(2)
Publicado el 08 de Febrero del 2011 por Roger Bermudez
6.717 visualizaciones desde el 08 de Febrero del 2011. Una media de 28 por semana
Muestra el número de filas y espacio que ocupan en disco, todos los objetos de SQL SERVER de una base de datos en concreto.
Para SQL Server 2000 en adelante.

Versión 1
estrellaestrellaestrellaestrellaestrella(2)

Publicado el 08 de Febrero del 2011gráfica de visualizaciones de la versión: Versión 1
6.718 visualizaciones desde el 08 de Febrero del 2011. Una media de 28 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
-- 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 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 CONVERT(bigint, reserved) DESC
 
 --–Eliminar la tabla temporal
 
DROP TABLE #results



Comentarios sobre la versión: Versión 1 (2)

Ruben sanchez
16 de Noviembre del 2015
estrellaestrellaestrellaestrellaestrella
Ese ejemplo no corre, no funciona, hacen perder el tiempo a uno.
Responder
Roger
23 de Noviembre del 2015
estrellaestrellaestrellaestrellaestrella
Creo que no subio correctamente el código:

--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 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
CONVERT(bigint, reserved) DESC
Responder

Comentar la versión: Versión 1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios

http://lwp-l.com/s2033