sql2005 查看数据库或表大小的系统存储过程 sp_spaceused

 
    

语法

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

参数

[ @objname =] ' objname '

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

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

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

[ @updateusage =] ' updateusage '

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

返回代码值

0(成功)或 1(失败)

结果集

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

列名 数据类型 说明

database_name

nvarchar(128)

当前数据库的名称。

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)

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

不返回对象的架构名称。如果需要架构名称,请使用 或 动态管理视图获取等价大小信息。

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。

注意:
在删除或重新生成大型索引时,或者在删除或截断大型表时,数据库引擎将延迟实际页释放及其关联锁,直至事务提交完毕为止。延迟的删除操作不会立即释放已分配的空间。因此,删除或截断一个大型对象后 sp_spaceused 随即返回的值可能不会影响可用的实际磁盘空间。有关延迟分配的详细信息,请参阅。

权限

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

posted on 2009-09-08 09:48 小手冰凉 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/gonghui/archive/2009/09/08/1562290.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
查看SQL Server数据库中各个表的大小,可以使用以下方法。 方法一:使用系统存储过程 1. 打开SQL Server Management Studio (SSMS),连接到目标数据库。 2. 在查询窗口中运行以下命令: ``` EXEC sp_MSforeachtable 'EXEC sp_spaceused ''?''' ``` 该命令会运行系统存储过程`sp_spaceused`,并对每个表执行该存储过程。执行完毕后,会显示每个表的大小信息,包括表名、行数、已分配空间、未使用空间等。 方法二:使用动态管理视图 1. 打开SQL Server Management Studio (SSMS),连接到目标数据库。 2. 在查询窗口中运行以下命令: ``` SELECT t.NAME AS TableName, s.Name AS SchemaName, p.rows AS RowCounts, SUM(a.total_pages) * 8 AS TotalSpaceKB, SUM(a.used_pages) * 8 AS UsedSpaceKB, (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB FROM sys.tables t INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.NAME NOT LIKE 'dt%' AND t.is_ms_shipped = 0 AND i.OBJECT_ID > 255 GROUP BY t.Name, s.Name, p.Rows ORDER BY TotalSpaceKB DESC ``` 该命令会查询系统的动态管理视图以获取每个表的大小信息。执行完毕后,会按照表的总空间大小进行排序,并显示表名、架构名、行数、总空间、已使用空间和未使用空间等信息。 无论是使用系统存储过程还是动态管理视图,都可以方便地查看SQL Server数据库中各个表的占用大小信息,以便进行存储空间管理和性能优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值