RDS SQL Server如何查看实例、数据库及表占用的空间大小 SQL Server查看所有表大小,所占空间

概述

本文主要介绍如何查看RDS SQL Server实例、数据库及表占用的磁盘空间大小。

查看数据库的大小

  1. 使用客户端连接实例,关于如何连接实例,请参见连接实例
  2. 在SQL窗口中执行如下SQL语句。

    1. use [$DB]
    2. go
    3. sp_spaceused @updateusage=N'true'

    注:[$DB]为数据库的库名。

  3. 系统显示类似如下。
    SQL Server如何查看实例、数据库及表占用的空间大小 - 图1

    提示:字段介绍如下所示。 | 参数 | 说明 | | :—- | :—- | | database_size | 即数据库的大小,它包含日志的大小,始终大于reserved+unallocated_space。 | | unallocated space | 数据库的未分配空间。 | | reserved | 已分配的空间总量。 | | data | 数据使用的空间总量。 | | index_size | 索引使用的空间。 | | unused | 未用的空间量。 |

  4. 查看所有的数据库,则需要使用脚本来实现,脚本如下所示。

    1. USE master
    2. go
    3. DECLARE @insSize TABLE(dbName sysname,checkTime VARCHAR(19),dbSize VARCHAR(50),logSize VARCHAR(50))
    4. INSERT INTO @insSize ( dbName, checkTime, dbSize, logSize )
    5. EXEC sp_msforeachdb 'select ''?'' dbName,CONVERT(VARCHAR(19),GETDATE(),120) checkTime,LTRIM(STR(SUM(CASE WHEN RIGHT(FILENAME,3)<>''ldf'' THEN convert (dec (15,2),size) * 8 / 1024 ELSE 0 END),15,2)+'' MB'') dbSize,
    6. LTRIM(STR(SUM(CASE WHEN RIGHT(FILENAME,3)=''ldf'' THEN convert (dec (15,2),size) * 8 / 1024 ELSE 0 END),15,2)+'' MB'') logSize from ?.dbo.sysfiles'
    7. SELECT * FROM @insSize ORDER BY CONVERT(DECIMAL,LTRIM(RTRIM(SUBSTRING(dbSize,1,LEN(dbSize)-2)))) DESC
  5. 该输出结果包含日志文件的大小,查看日志文件的大小的SQL语句如下所示。

    1. dbcc sqlperf(logspace)
  6. 系统显示类似如下。
    SQL Server如何查看实例、数据库及表占用的空间大小 - 图2

查看数据库中表的大小

  1. 使用客户端连接实例,关于如何连接实例,请参见连接实例
  2. 在SQL窗口中执行如下SQL语句。

    1. use [$DB]
    2. go
    3. sp_spaceused N'[$Table]'

    注:[$Table]为数据库的表名。

  3. 系统显示类似如下。
    SQL Server如何查看实例、数据库及表占用的空间大小 - 图3

  4. 查看该库所有的表,则需要使用脚本来实现,脚本如下所示。
    1. use [$DB]
    2. go
    3. declare @tabSize table(name nvarchar(100),rows char(20),reserved varchar(18) ,data varchar(18) ,index_size varchar(18) ,nnused varchar(18) )
    4. insert into @tabSize exec sp_msforeachtable 'sp_spaceused ''?'''
    5. select * from @tabSize order by convert(int,replace(data,'KB','')) desc,2 desc

    SQL Server查看所有表大小,所占空间

    ```sql create table #Data(name varchar(100),row varchar(100),reserved varchar(100),data varchar(100),index_size varchar(100),unused varchar(100))

declare @name varchar(100) declare cur cursor for select name from sysobjects where xtype=’u’ order by name open cur fetch next from cur into @name while @@fetch_status=0 begin insert into #data exec sp_spaceused @name print @name

  1. fetch next from cur into @name

end close cur deallocate cur

create table #DataNew(name varchar(100),row int,reserved int,data int,index_size int,unused int)

insert into #dataNew select name,convert(int,row) as row,convert(int,replace(reserved,’KB’,’’)) as reserved,convert(int,replace(data,’KB’,’’)) as data, convert(int,replace(index_size,’KB’,’’)) as index_size,convert(int,replace(unused,’KB’,’’)) as unused from #data

select * from #dataNew order by data desc

  1. <a name="61a4c318"></a>
  2. ### 主要原理:
  3. `exec sp_spaceused` '表名' --取得表占用空間 <br />`exec sp_spaceused` ''--数据所有空間 <br />还有一个简单的办法
  4. ```sql
  5. SELECT a.name, b.rows
  6. FROM sysobjects AS a INNER JOIN
  7. sysindexes AS b ON a.id = b.id
  8. WHERE (a.type = 'u') AND (b.indid IN (0, 1))
  9. ORDER BY b.rows DESC