sp_spaceused (Transact-SQL)
顯示資料列的數目、所保留的磁碟空間和資料表所用的磁碟空間、索引檢視,或目前資料庫中的 Service Broker 佇列,或顯示整個資料庫所保留和使用的磁碟空間。
語法
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_stats 或 sys.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 的總和,因為它包括記錄檔的大小,但 reserved 和 unallocated_space 只考量資料頁。
XML 索引和全文檢索索引所用的頁面包括在兩個結果集的 index_size 中。當指定了 objname 時,reserved 和 index_size 總結果也會將物件的 XML 索引和全文檢索索引的頁面計算在內。
如果針對具有空間索引、空間大小資料行 (如 database_size、reserved 和 index_size) 的資料庫或物件來計算空間使用量,請包含空間索引的大小。
當指定了 updateusage 時,SQL Server Database Engine 會掃描資料庫中的資料頁,關於每份資料表所用的儲存空間,它會進行 sys.allocation_units 和 sys.partitions 目錄檢視的必要更正。例如,在某些狀況下,在卸除索引之後,資料表的空間資訊可能不是目前的資訊。如果是大型資料表或資料庫,updateusage 的執行時間可能會比較長。請只在您覺得傳回的值不正確時,以及不會對資料庫的其他使用者或處理序造成不良影響時,才使用 updateusage。如果願意的話,您可以個別執行 DBCC UPDATEUSAGE。
[!附註]
當您卸除或重建大型索引時,或卸除或截斷大型資料表時,Database Engine 會延遲取消配置實際的頁面及其相關聯鎖定,直到認可交易之後。延遲的卸除作業並不會立即釋出已配置的空間。因此,在卸除或截斷大型物件之後,sp_spaceused 立即傳回的值不一定能反映實際可用的磁碟空間。如需有關延遲配置的詳細資訊,請參閱<卸除和重建大型物件>。
權限
執行 sp_spaceused 的權限會授與 public 角色。只有 db_owner 固定資料庫角色的成員,才能夠指定 @updateusage 參數。
範例
A. 顯示資料表的相關磁碟空間資訊
下列範例會報告 Vendor 資料表及其索引的磁碟空間資訊。
USE AdventureWorks;
GO
EXEC sp_spaceused N'Purchasing.Vendor';
GO
B. 顯示資料庫的相關更新空間資訊
下列範例會摘要目前資料庫所用的空間,並利用選擇性參數 @updateusage 來確定會傳回目前的值。
USE AdventureWorks;
GO
EXEC sp_spaceused @updateusage = N'TRUE';
GO