sql实用语句sp_spaceused查询表所占空间大小

sp_spaceused (Transact-SQL)
SQL Server 2008 R2

 

显示行数、保留的磁盘空间以及当前数据库中的表、索引视图或 Service Broker 队列所使用的磁盘空间,或显示由整个数据库保留和使用的磁盘空间。javascript

主题连接图标 Transact-SQL 语法约定html

语法

sp_spaceused [[ @objname = ] 'objname' ] 
[,[ @updateusage = ] 'updateusage' ]
参数

[ @objname =] ' objname '

请求其空间使用信息的表、索引视图或队列的限定或非限定名称。仅当指定限定对象名称时,才须要使用引号。若是提供彻底限定对象名称(包括数据库名称),则数据库名称必须是当前数据库的名称。java

若是未指定 objname,则返回整个数据库的结果。数据库

objname 的数据类型为 nvarchar(776),默认值为 NULL。架构

[ @updateusage =] ' updateusage '

指示应运行 DBCC UPDATEUSAGE 以更新空间使用信息。当未指定 objname 时,将对整个数据库运行该语句;不然,将对 objname 运行该语句。值能够是 truefalseupdateusage 的数据类型为 varchar(5),默认值为 falseide

返回代码值

0(成功)或 1(失败)this

结果集

若是省略 objname ,将返回如下结果集,以提供当前数据库大小信息。spa

 

列名 数据类型 说明

database_name日志

nvarchar(128)code

当前数据库的名称。

database_size

varchar(18)

当前数据库的大小 (MB)。database_size 包括数据和日志文件。

unallocated space

varchar(18)

未保留供数据库对象使用的数据库空间。

 

列名 数据类型 说明

reserved

varchar(18)

由数据库中对象分配的空间总量。

数据

varchar(18)

数据使用的空间总量。

index_size

varchar(18)

索引使用的空间总量。

unused

varchar(18)

为数据库中的对象保留但还没有使用的空间总量。

若是指定 objname,则将为指定对象返回如下结果集。

 

列名 数据类型 说明

name

nvarchar(128)

请求其空间使用信息的对象的名称。

不返回对象的架构名称。若是须要架构名称,请使用 sys.dm_db_partition_statssys.dm_db_index_physical_stats 动态管理视图获取等价大小信息。

rows

char(11)

表中现有的行数。若是指定的对象是 Service Broker 队列,该列将指示队列中的消息数。

reserved

varchar(18)

objname 保留的空间总量。

数据

varchar(18)

objname 中的数据所使用的空间总量。

index_size

varchar(18)

objname 中的索引所使用的空间总量。

unused

varchar(18)

objname 保留但还没有使用的空间总量。

注释

database_size 将始终大于 reserved + unallocated_space 之和,由于该值包括日志文件的大小,而 reservedunallocated_space 只考虑数据页。

在这两个结果集的 index_size 中,都包括了 XML 索引和全文索引使用的页。当指定 objname 时,对象的 XML 索引和全文索引所使用的页将计算在 reservedindex_size 结果中。

若是为具备空间索引的数据库或对象计算空间使用状况,则空间大小列(例如 database_sizereservedindex_size)将包含空间索引的大小。

指定 updateusage 时,SQL Server 数据库引擎将扫描数据库中的数据页,并根据每一个表所使用的存储空间对 sys.allocation_unitssys.partitions 目录视图进行必要的更正。在某些状况下(例如删除索引后、表的空间信息不是当前信息时),须要执行该操做。updateusage 在大型表或数据库上运行会花费一些时间。只有当怀疑所返回的值不正确,并且该进程对数据库中的其余用户或进程没有负面影响时,才应使用 updateusage。若是首选该进程,则能够单独运行 DBCC UPDATEUSAGE。

ms188776.note(zh-cn,SQL.105).gif注意:
在删除或从新生成大型索引时,或者在删除或截断大型表时,数据库引擎将延迟实际页释放及其关联锁,直至事务提交完毕为止。延迟的删除操做不会当即释放已分配的空间。所以,删除或截断一个大型对象后 sp_spaceused 随即返回的值可能不会影响可用的实际磁盘空间。有关延迟分配的详细信息,请参阅删除并从新生成大型对象

 

 

权限

执行 sp_spaceused 的权限授予 public 角色。只有 db_owner 固定数据库角色的成员能够指定 @updateusage 参数。

示例

A. 显示表的磁盘空间信息

如下示例报告 Vendor 表及其索引的磁盘空间信息。

USE AdventureWorks2008R2;
GO
EXEC sp_spaceused N'Purchasing.Vendor';
GO

B. 显示数据库的已更新空间信息

下例对当前数据库中使用的空间进行了汇总,并使用可选参数 @updateusage 确保返回当前值。

USE AdventureWorks2008R2;
GO
EXEC sp_spaceused @updateusage = N'TRUE';
GO
相关文章
相关标签/搜索