合 MSSQL中的sp_spaceused函数
Tags: MSSQLSQL Server表大小sp_spaceused
简介
sp_spaceused显示当前数据库中表、索引视图或 Service Broker 队列使用的行数、磁盘空间预留和磁盘空间,或显示整个数据库保留和使用的磁盘空间。
该结果报告包含几个重要的列,其中之一是 reserved
。reserved
列表示分配给对象(表或视图)的总空间大小,包括由数据、索引和其他对象元数据占用的空间。这个值是对象在磁盘上所占用的总空间,无论这些空间是否被实际使用。
具体来说,reserved
包括以下几个部分:
- 数据空间(data):存储表中的实际数据。
- 索引空间(index_size):存储表的索引占用的空间。
- 未分配空间(unused):保留但尚未分配给表的空间。
总的来说,reserved
反映了对象占用的总物理磁盘空间,而不考虑这些空间是否实际上已经被使用。如果要查看实际使用的空间,可以关注 data
列,该列表示实际存储的数据空间大小。
1 2 3 4 5 6 7 | -- 表信息(ALT+F1) exec sp_spaceused N'BigTable'; exec sp_helpindex N'bigtable'; exec sp_help N'bigtable'; |
语法
1 2 3 4 5 | sp_spaceused [[ @objname = ] 'objname' ] [, [ @updateusage = ] 'updateusage' ] [, [ @mode = ] 'mode' ] [, [ @oneresultset = ] oneresultset ] [, [ @include_total_xtp_storage = ] include_total_xtp_storage ] |
备注
Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。
参数
对于 Azure Synapse Analytics 和 Analytics Platform System (PDW) ,sp_spaceused
必须指定命名参数 (例如sp_spaceused (@objname= N'Table1');
,而不是依赖于参数的序号位置。
1 | [ @objname = ] 'objname' |
请求其空间使用信息的表、索引视图或队列的限定或非限定名称。 仅当指定限定对象名称时,才需要使用引号。 如果提供完全限定对象名称(包括数据库名称),则数据库名称必须是当前数据库的名称。
如果未指定 objname ,则会为整个数据库返回结果。
objname 为 nvarchar (776) ,默认值为 NULL。
备注
Azure Synapse Analytics 和 Analytics Platform System (PDW) 仅支持数据库和表对象。
[ @updateusage = ] 'updateusage'
指示应运行 DBCC UPDATEUSAGE 来更新空间使用情况信息。 如果未指定 objname ,语句将在整个数据库上运行;否则,语句在 objname 上运行。 值可以是 true 或 false。 updateusage 为 varchar (5) ,默认值为 false。
[ @mode = ] 'mode'
指示结果的范围。 对于拉伸表或数据库, mode 参数允许包含或排除对象的远程部分。 有关详细信息,请参阅 Stretch Database。
重要
SQL Server 2022 (16.x) 中已弃用 Stretch Database。 后续版本的 Microsoft SQL Server 将删除该功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。
mode 参数可以具有以下值:
Expand table
值 | 说明 |
---|---|
ALL | 返回对象或数据库的存储统计信息,包括本地部分和远程部分。 |
LOCAL_ONLY | 仅返回对象或数据库的本地部分的存储统计信息。 如果对象或数据库未启用 Stretch,则返回与 = @mode ALL 时相同的统计信息。 |
REMOTE_ONLY | 仅返回对象或数据库的远程部分的存储统计信息。 如果满足以下条件之一,此选项将引发错误: 该表未为 Stretch 启用。 表已启用 Stretch,但从未启用数据迁移。 在这种情况下,远程表尚没有架构。 用户已手动删除远程表。 远程数据存档的预配返回了“成功”状态,但实际上失败了。 |
mode 为 varchar (11) ,默认值为 N'ALL”。
[ @oneresultset = ] oneresultset
指示是否返回单个结果集。 oneresultset 参数可以具有以下值:
Expand table
值 | 说明 |
---|---|
0 | 当 @objname 为 null 或未指定时,将返回两个结果集。 两个结果集是默认行为。 |
1 | 当 @objname = null 或 未指定时,将返回单个结果集。 |
oneresultset 为 bit,默认值为 0。
[ @include_total_xtp_storage] 'include_total_xtp_storage'
适用于:SQL Server 2017 (14.x) ,SQL 数据库。
当 为 时 @oneresultset=1,参数 @include_total_xtp_storage 确定单个结果集是否包含用于MEMORY_OPTIMIZED_DATA存储的列。 默认值为 0,即默认情况下,如果省略参数 () 结果集中不包含 XTP 列。
返回代码值
0(成功)或 1(失败)
结果集
如果省略 objname 且 oneresultset 的值为 0,则返回以下结果集以提供当前数据库大小信息。
Expand table
列名称 | 数据类型 | 说明 |
---|---|---|
database_name | nvarchar(128) | 当前数据库的名称。 |
database_size | varchar (18) | 当前数据库的大小 (MB)。 database_size 包括数据和日志文件。 |
未分配的空间 | varchar (18) | 未保留供数据库对象使用的数据库空间。 |
Expand table
列名称 | 数据类型 | 说明 |
---|---|---|
reserved | varchar (18) | 由数据库中对象分配的空间总量。 |
data | varchar (18) | 数据使用的空间总量。 |
index_size | varchar (18) | 索引使用的空间总量。 |
unused | varchar (18) | 为数据库中的对象保留但尚未使用的空间总量。 |
如果省略 objname 并且 oneresultset 的值为 1,则返回以下单个结果集以提供当前数据库大小信息。