• 【转载】sp_spaceused2,看库里全部表占用的物理空间


    我常用sp_spaceused来查看表所占的空间大小,可是一次只能看一个对象的。
    今天有空写了个sp_spaceused2,可以同时看全部表的空间大小。
    use master
    go
    EXEC sp_addmessage @msgnum = 55000@severity = 16
       
    @msgtext = N'Objects of type %s do not have space allocated.'
       
    @lang = 'us_english',@replace = 'replace'

    EXEC sp_addmessage @msgnum = 55000@severity = 16
       
    @msgtext = N'没有为类型 %1! 的对象分配的空间。'
       
    @lang = '简体中文',@replace = 'replace'
    go
    if exists (select 1 from sysobjects where name = 'sp_spaceused2' and type = 'P')
     
    drop procedure sp_spaceused2
    go
    create procedure sp_spaceused2 (
     
    @type varchar(2= 'U'-- The objects type we want size on.
     @updateusage varchar(5= false -- Param. for specifying that
         -- usage info. should be updated.
    )
    as
    create table #spt_space
    (
     id  
    int not null primary key,
     name  sysname,
     rows  
    int null,
     reserved 
    dec(15null,
     data  
    dec(15null,
     indexp  
    dec(15null,
     unused  
    dec(15null
    )

    --  Check the object type.
    if @type not in ('U','S'-- no physical data storage.
      begin
       
    raiserror(55000,-1,-1,@type)
       
    return (1)
      
    end

    --  Check to see if user wants usages updated.

    if @updateusage is not null
     
    begin
      
    select @updateusage=lower(@updateusage)

      
    if @updateusage not in ('true','false')
       
    begin
        
    raiserror(15143,-1,-1,@updateusage)
        
    return(1)
       
    end
     
    end

    if @updateusage = 'true'
     
    begin
      
    dbcc updateusage(0with no_infomsgs
      
    print ' '
     
    end

    set nocount on
    --id, name, rows
    insert into #spt_space (id, name, rows, data)
    select i.id, o.name, i.rows, 0
    from sysindexes i inner join sysobjects o on i.id = o.id 
    where i.indid < 2 and o.type = @type

    --reserved
    update #spt_space
    set reserved = r.reserved
    from ( select o.id, sum(i.reserved) as reserved from sysindexes i inner join sysobjects o on i.id = o.id 
     
    where i.indid in (01255and o.type = @type group by o.id) r
    where #spt_space.id = r.id

    --data
    update #spt_space
    set data = data + r.pages
    from ( select o.id, isnull(sum(i.dpages),0as pages from sysindexes i inner join sysobjects o on i.id = o.id 
     
    where i.indid < 2 and o.type = @type group by o.id) r
    where #spt_space.id = r.id

    update #spt_space
    set data = data + r.used
    from ( select o.id, isnull(sum(used), 0as used from sysindexes i inner join sysobjects o on i.id = o.id 
     
    where i.indid = 255 and o.type = @type group by o.id) r
    where #spt_space.id = r.id


    --index page
    update #spt_space
    set indexp = r.used - data
    from ( select o.id, sum(convert(dec(15),used)) as used from sysindexes i inner join sysobjects o on i.id = o.id 
     
    where i.indid in (01255and o.type = @type group by o.id) r
    where #spt_space.id = r.id

    --unused page
    update #spt_space
    set unused = reserved - r.used
    from ( select o.id, sum(convert(dec(15),used)) as used from sysindexes i inner join sysobjects o on i.id = o.id 
     
    where i.indid in (01255and o.type = @type group by o.id) r
    where #spt_space.id = r.id

    --output
     select #spt_space.name,
      rows 
    = convert(char(11), rows),
      reserved 
    = ltrim(str(reserved * d.low / 1024.,15,0+
        
    ' ' + 'KB'),
      data 
    = ltrim(str(data * d.low / 1024.,15,0+
        
    ' ' + 'KB'),
      index_size 
    = ltrim(str(indexp * d.low / 1024.,15,0+
        
    ' ' + 'KB'),
      unused 
    = ltrim(str(unused * d.low / 1024.,15,0+
        
    ' ' + 'KB')
     
    from #spt_space, master.dbo.spt_values d
      
    where d.number = 1
       
    and d.type = 'E'

    return 0
    go


    sp_MS_marksystemobject 
    'sp_spaceused2'

    go
    use [dbname]
    exec sp_spaceused2
    出处:http://blog.myspace.cn/1300316663/archive/2007/05/23/249582259.aspx
  • 相关阅读:
    Androidstudio 使用git插件提交代码
    androidstudio上传代码到git上
    tcpdump的简单使用
    使用nmap工具查询局域网某个网段正在使用的ip地址
    网段的划分
    jenkins配置源码管理git
    shell条件测试test
    shell简单用法笔记(shell中数值运算)二
    shell简单用法笔记(一)
    如何解决audiodg占用内存高(停止与重启audiodg服务)
  • 原文地址:https://www.cnblogs.com/yukaizhao/p/sp_spaceused2.html
Copyright © 2020-2023  润新知