Calcolo dello spazio occupato dalle tabelle in SQL Server

Home | SQL Server

Quando necessario fare un p di pulizie in un database SQL Server o ottimizzare le query che attingono a tabelle troppo grandi necessario sapere tabella per tabella, indice per indice il numero di record e lo spazio su disco occupato. Quello che segue lo script che permette la visualizzazione di questi dati.

Tutto quello che bisogna fare aprire il query analizer, posizionarsi sul database in questione e lanciare lo script che il pi delle volte risponde in pochi secondi. Questa query per calcolare lo spazio occupato dalle singole tabelle potrebbe ritornare utile anche per iniziare un'analisi per lo svecchiamento del database, che a volte necessaria quando si vuole evitare di avere VLDB (very large database) per i quali bisogna ragionare in modo diverso rispetto ai canoni standard.

il codice T-SQL

	declare @SourceDB varchar(128)
	declare @sql varchar(128)
	create table #tables(name varchar(128))
	select @sql = 'insert #tables select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = ''BASE TABLE'''
	exec (@sql)

	create table #SpaceUsed (name varchar(128), rows varchar(11), reserved varchar(18), 
		data varchar(18), index_size varchar(18), unused varchar(18))
	declare @name varchar(128)
	select @name = ''
	while exists (select * from #tables where name > @name)
	begin
	select @name = min(name) from #tables where name > @name
	select @sql = 'exec ..sp_executesql N''insert #SpaceUsed exec sp_spaceused ' + @name + ''''
	exec (@sql)
	end
	select Name NomeTabella,
	cast([rows] as decimal) righe,
	cast(left(reserved,len(reserved)-3) as decimal(18,2))/1024 riservato,
	cast(left(data ,len(data)-3) as decimal(18,2))/1024 Dati,
	cast(left(index_size ,len(index_size)-3) as decimal(18,2))/1024 Indici,
	cast(left(unused ,len(unused)-3) as decimal(18,2))/1024 NonUsato
	from #SpaceUsed
	order by riservato desc
	drop table #tables
	drop table #SpaceUsed
	

Lo script l'ho testato quando l'utente che lo lancia owner del database in questione. In effetti basta che l'utente che esegue la query abbia i diritti di eseguire la stord procedure sp_spaceused.

L'ordinamento finale per spazio riservato (reserved), si pu cambiare facilmente la query facendo ordinare il risultato per spazio occupato dai dati, spazio occupato dagli indici o spazio libero non utilizzato, che resumibilmente dovuto al fill factor degli indici o alla deframmentazione fisica delle tabelle d e degli indici, quindi volendo l'ordinamento per spazio non utilizzato potrebbe darci un'idea delle tabelle pi mal ridotte.


Torna alla home page di SQL Server

Home