Grösse von Objekten in der DB ermitteln

14. Februar 2011 – 10:41

Mit den folgenden Statements kann man die Grösse bestimmter Objekte in der DB herausfinden:

a) Grösse der Datenbank

1
EXEC sp_spaceused

Size of a database

b) Grösse aller Tabellen

Folgende Stored Procedure erstellen und ausführen:

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
CREATE PROCEDURE sp_GetTableSizes
AS
SET NOCOUNT ON  
 
-- benötigte Variablen deklarieren
DECLARE @SQL VARCHAR(128)
DECLARE @tname VARCHAR(128)  
 
-- temporäre Tabelle für Tabellennamen erzeugen...
CREATE TABLE tmpTables(tName VARCHAR(128))  
 
-- ... und befüllen
SELECT @SQL = 'INSERT tmpTables '
+ 'SELECT table_name FROM INFORMATION_SCHEMA.TABLES '
+ 'WHERE table_type = ''BASE TABLE'''
EXEC (@SQL)  
 
-- temporäre Tabelle für Tabelleninformationen erzeugen...
CREATE TABLE tmpSpaceUsed (
name VARCHAR(128),
ROWS VARCHAR(11),
reserved VARCHAR(18),
DATA VARCHAR(18),
index_size VARCHAR(18),
unused VARCHAR(18))  
 
SELECT @tname = ''  
 
-- ...über Tabellennamen und der System-SP 'sp_spaceused' befüllen
WHILE EXISTS (SELECT * FROM tmpTables WHERE tName > @tname)
BEGIN
SELECT @tname = MIN(tName) FROM tmpTables WHERE tName > @tname
SELECT @SQL = 'INSERT tmpSpaceUsed EXEC sp_spaceused ' + @tname + ''
EXEC (@SQL)
END  
 
-- Ausgabe des Resultsets
SELECT * FROM tmpSpaceUsed  
 
-- Löschen der temporären Tabellen
DROP TABLE tmpTables
DROP TABLE tmpSpaceUsed

Size of all tables

c) Grösse einer einzelnen Tabelle

EXEC sp_spaceused Tablename

Size of a single table

d) Grösse einer Spalte

1
2
3
SELECT datalength(COLUMN)/1024 AS 'Size in KB'
FROM TABLE
ORDER BY 'SIZE in KB' DESC

Size of a column

Beitrag kommentieren