sp_spaceused (Transact-SQL)

顯示資料列的數目、所保留的磁碟空間和資料表所用的磁碟空間、索引檢視,或目前資料庫中的 Service Broker 佇列,或顯示整個資料庫所保留和使用的磁碟空間。

主題連結圖示Transact-SQL 語法慣例

語法

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

引數

  • [ @objname=] 'objname'
    這是要求的空間使用方式資訊所屬之資料表、索引檢視或佇列的完整或非完整名稱。只有在指定完整物件名稱時,才會需要引號。如果提供完整物件名稱 (包括資料庫名稱),資料庫名稱就必須是目前資料庫的名稱。

    如果未指定 objname,就會傳回整個資料庫的結果。

    objname 是 nvarchar(776),預設值是 NULL。

  • [ @updateusage=] 'updateusage'
    指出應該執行 DBCC UPDATEUSAGE 來更新空間使用方式資訊。當未指定 objname 時,會針對整個資料庫執行這個陳述式;否則,就會針對 objname 來執行這個陳述式。值可以是 true 或 false。updateusage 是 varchar(5),預設值是 false。

傳回碼值

0 (成功) 或 1 (失敗)

結果集

如果省略 objname ,就會傳回下列結果集來提供目前資料庫大小資訊。

資料行名稱

資料類型

描述

database_name

nvarchar(128)

目前資料庫的名稱。

database_size

varchar(18)

目前資料庫的大小 (以 MB 為單位)。database_size 包括資料檔和記錄檔。

unallocated space

varchar(18)

資料庫中尚未保留給資料庫物件的空間。

資料行名稱

資料類型

描述

reserved

varchar(18)

資料庫中的物件所配置的空間總量。

data

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 的保留空間總量。

data

varchar(18)

objname 中之資料所用的空間總量。

index_size

varchar(18)

objname 中之索引所用的空間總量。

unused

varchar(18)

保留給 objname 但尚未使用的空間總量。

備註

database_size 一律會大於 reserved + unallocated space 的總和,因為它包括記錄檔的大小,但 reservedunallocated_space 只考量資料頁。

XML 索引和全文檢索索引所用的頁面包括在兩個結果集的 index_size 中。當指定了 objname 時,reservedindex_size 總結果也會將物件的 XML 索引和全文檢索索引的頁面計算在內。

如果針對具有空間索引、空間大小資料行 (如 database_sizereservedindex_size) 的資料庫或物件來計算空間使用量,請包含空間索引的大小。

當指定了 updateusage 時,SQL Server Database Engine 會掃描資料庫中的資料頁,關於每份資料表所用的儲存空間,它會進行 sys.allocation_unitssys.partitions 目錄檢視的必要更正。例如,在某些狀況下,在卸除索引之後,資料表的空間資訊可能不是目前的資訊。如果是大型資料表或資料庫,updateusage 的執行時間可能會比較長。請只在您覺得傳回的值不正確時,以及不會對資料庫的其他使用者或處理序造成不良影響時,才使用 updateusage。如果願意的話,您可以個別執行 DBCC UPDATEUSAGE。

[!附註]

當您卸除或重建大型索引時,或卸除或截斷大型資料表時,Database Engine 會延遲取消配置實際的頁面及其相關聯鎖定,直到認可交易之後。延遲的卸除作業並不會立即釋出已配置的空間。因此,在卸除或截斷大型物件之後,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