MSSQL sqlserver 如何获取统计表行数及表占用空间大小


需求产生原因:
近期老板需要知道我们每天每张表,增加了多少数据量,及预估每个月数据库增长的大小
左思右想:
最后我们采用快照的方式,在每天凌晨将数据库表的大小及占用空间进行缓存至指定的数据表,然后按天进行对比,
下文将讲述具体的实现方法


第一步 建表,存储每日表相关数据

   create table tableInfoList
   (tableName varchar(200),
    numQty  bigint,
    reserved VARCHAR(20) ,
    data VARCHAR(20) ,
    index_size VARCHAR(20) ,
    unused VARCHAR(20),
    writeDate datetime default getDate()
    )
 

第二步 循环遍历表 ,将表信息存储至 表中

     declare @i int ,@imax int 
 declare @tbName varchar(200)
 create table #t(keyId int identity(1,1),tablename varchar(60))
 insert into #t (tableName) select name from sys.tables where type='u'
 
 
 set @i=1
 select @imax=max(keyId) from #t 
 while @i<=@imax 
 begin
  select @tbname =tableName from #t where keyId =@i
 
  if isnull(@tbname,'') !=''
  begin
  
   insert into tableInfoList (tableName ,
    numQty,reserved,data,
    index_size,unused)
    EXEC sp_spaceused @tbname
  end
  
  set @tbName =''
  set @i=@i+1 
  
 end
 

 truncate table #t
 drop     table #t 
 go



第三步 每日凌晨生成表数据,然后进行相关的对比

    select * from tableInfoList a 
 left join tableInfoList b
 on a.tableName = b.tableName 
 where a.writeDate >='2017-12-15 0:00:00' 
  and a.writeDate <='2017-12-15 23:00:00'   --昨日日期
  and   b.writeDate >='2017-12-16 0:00:00' 
  and b.writeDate <='2017-12-16 23:00:00'   --今日日期


通过以上三个步骤,我们就可以分析出每日数据表的行数增长率和分析出表空间的大小