In one of my projects, the client is concerned about the size of the database. He wants to save money on hosting, so I was going to poke around & see where I could cull data (if any).
After a quick surf, Bill Graziano's script from SQLTeam.com did what I needed. Make sure to run DBCC UPDATEUSAGE('databasename') to get the most accurate results.
/**************************************************************************************** BigTables.sql* Bill Graziano (SQLTeam.com)* graz@sqlteam.com* v1.11***************************************************************************************/declare @id int declare @type character(2) declare @pages int declare @dbname sysnamedeclare @dbsize dec(15,0)declare @bytesperpage dec(15,0)declare @pagesperMB dec(15,0)create table #spt_space(objid int null,rows int null,reserved dec(15) null,data dec(15) null,indexp dec(15) null,unused dec(15) null)set nocount on-- Create a cursor to loop through the user tablesdeclare c_tables cursor forselect idfrom sysobjectswhere xtype = 'U'open c_tablesfetch next from c_tablesinto @idwhile @@fetch_status = 0begin/* Code from sp_spaceused */insert into #spt_space (objid, reserved)select objid = @id, sum(reserved)from sysindexeswhere indid in (0, 1, 255)and id = @idselect @pages = sum(dpages)from sysindexeswhere indid < 2and id = @idselect @pages = @pages + isnull(sum(used), 0)from sysindexeswhere indid = 255and id = @idupdate #spt_spaceset data = @pageswhere objid = @id/* index: sum(used) where indid in (0, 1, 255) - data */update #spt_spaceset indexp = (select sum(used)from sysindexeswhere indid in (0, 1, 255)and id = @id)- datawhere objid = @id/* unused: sum(reserved) - sum(used) where indid in (0, 1, 255) */update #spt_spaceset unused = reserved- (select sum(used)from sysindexeswhere indid in (0, 1, 255)and id = @id)where objid = @idupdate #spt_spaceset rows = i.rowsfrom sysindexes iwhere i.indid < 2and i.id = @idand objid = @idfetch next from c_tablesinto @idendselect top 25Table_Name = (select left(name,25) from sysobjects where id = objid),rows = convert(char(11), rows),reserved_KB = ltrim(str(reserved * d.low / 1024.,15,0) + ' ' + 'KB'),data_KB = ltrim(str(data * d.low / 1024.,15,0) + ' ' + 'KB'),index_size_KB = ltrim(str(indexp * d.low / 1024.,15,0) + ' ' + 'KB'),unused_KB = ltrim(str(unused * d.low / 1024.,15,0) + ' ' + 'KB'),idx_data_ratio = ltrim(str(indexp*100 /data) + '%'),unused_pct = ltrim(str(unused * 100 /reserved) + '%')from #spt_space, master.dbo.spt_values dwhere d.number = 1and d.type = 'E'order by reserved descdrop table #spt_spaceclose c_tablesdeallocate c_tables
Powered by: newtelligence dasBlog 2.0.7226.0
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.
© Copyright 2008, Ben Strackany
E-mail