概述
本文主要介绍如何查看RDS SQL Server实例、数据库及表占用的磁盘空间大小。
查看数据库的大小
- 使用客户端连接实例,关于如何连接实例,请参见连接实例。
在SQL窗口中执行如下SQL语句。
use [$DB]
go
sp_spaceused @updateusage=N'true'
注:[$DB]为数据库的库名。
-
提示:字段介绍如下所示。 | 参数 | 说明 | | :—- | :—- | | database_size | 即数据库的大小,它包含日志的大小,始终大于reserved+unallocated_space。 | | unallocated space | 数据库的未分配空间。 | | reserved | 已分配的空间总量。 | | data | 数据使用的空间总量。 | | index_size | 索引使用的空间。 | | unused | 未用的空间量。 |
查看所有的数据库,则需要使用脚本来实现,脚本如下所示。
USE master
go
DECLARE @insSize TABLE(dbName sysname,checkTime VARCHAR(19),dbSize VARCHAR(50),logSize VARCHAR(50))
INSERT INTO @insSize ( dbName, checkTime, dbSize, logSize )
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,
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'
SELECT * FROM @insSize ORDER BY CONVERT(DECIMAL,LTRIM(RTRIM(SUBSTRING(dbSize,1,LEN(dbSize)-2)))) DESC
该输出结果包含日志文件的大小,查看日志文件的大小的SQL语句如下所示。
dbcc sqlperf(logspace)
查看数据库中表的大小
- 使用客户端连接实例,关于如何连接实例,请参见连接实例。
在SQL窗口中执行如下SQL语句。
use [$DB]
go
sp_spaceused N'[$Table]'
注:[$Table]为数据库的表名。
- 查看该库所有的表,则需要使用脚本来实现,脚本如下所示。
use [$DB]
go
declare @tabSize table(name nvarchar(100),rows char(20),reserved varchar(18) ,data varchar(18) ,index_size varchar(18) ,nnused varchar(18) )
insert into @tabSize exec sp_msforeachtable 'sp_spaceused ''?'''
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
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
<a name="61a4c318"></a>
### 主要原理:
`exec sp_spaceused` '表名' --取得表占用空間 <br />`exec sp_spaceused` ''--数据所有空間 <br />还有一个简单的办法
```sql
SELECT a.name, b.rows
FROM sysobjects AS a INNER JOIN
sysindexes AS b ON a.id = b.id
WHERE (a.type = 'u') AND (b.indid IN (0, 1))
ORDER BY b.rows DESC