sp_spaceused (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

系統 sp_spaceused 預存程式會顯示下列其中一項:

  • 目前資料庫中數據表、索引檢視表或 Service Broker 佇列所使用的數據列、保留磁碟空間和磁碟空間數目

  • 保留並供整個資料庫使用的磁碟空間

Transact-SQL 語法慣例

Syntax

sp_spaceused
    [ [ @objname = ] N'objname' ]
    [ , [ @updateusage = ] 'updateusage' ]
    [ , [ @mode = ] 'mode' ]
    [ , [ @oneresultset = ] oneresultset ]
    [ , [ @include_total_xtp_storage = ] include_total_xtp_storage ]
[ ; ]

注意

Azure Synapse Analytics 的無伺服器 SQL 集區不支援此語法。

引數

針對 Azure Synapse Analytics 和分析平台系統 (PDW), sp_spaceused 必須指定具名參數(例如 sp_spaceused (@objname= N'Table1');),而不是依賴參數的序數位置。

[ @objname = ] N'objname'

要求空間使用資訊之數據表、索引檢視表或佇列的限定或非限定名稱。 @objname為 nvarchar(776),預設值為 NULL。 只有在指定限定的物件名稱時,才需要引號。 如果提供完整物件名稱(包括資料庫名稱),資料庫名稱必須是目前資料庫的名稱。

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

注意

Azure Synapse Analytics 和分析平台系統 (PDW) 僅支援資料庫和數據表物件。

[ @updateusage = ] 'updateusage'

DBCC UPDATEUSAGE表示應該執行 以更新空間使用量資訊。 @updateusage為 varchar(5),預設值為 false。 未指定@objname,語句會在整個資料庫上執行。 否則,語句會在 @objname執行。 值可以是 truefalse

[ @mode = ] 'mode'

指出結果的範圍。 對於延展數據表或資料庫, @mode 參數可讓您包含或排除對象的遠端部分。 如需詳細資訊,請參閱 Stretch Database

重要

Stretch Database 在 SQL Server 2022 (16.x) 及 Azure SQL 資料庫中已被取代。 資料庫引擎的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。

@mode為 varchar(11),而且可以是下列其中一個值。

Description
ALL (預設值) 傳回物件或資料庫的儲存統計數據,包括本機部分和遠端部分。
LOCAL_ONLY 只傳回物件或資料庫的本機部分的記憶體統計數據。 如果對象或資料庫未啟用 Stretch,則傳回與 @modeALL相同的統計數據。
REMOTE_ONLY 只傳回物件或資料庫的遠端部分的記憶體統計數據。 當下列其中一個條件成立時,此選項會引發錯誤:

數據表未針對 Stretch 啟用。

數據表已啟用 Stretch,但您從未啟用資料遷移。 在此情況下,遠端數據表還沒有架構。

用戶手動卸除遠程數據表。

遠端數據封存的布建傳回成功狀態,但事實上失敗。

[ @oneresultset = ] oneresultset

指出是否要傳回單一結果集。 @oneresultset位,可以是下列其中一個值:

Description
0 (預設值) 當@objname為 null 或未指定時,會傳回兩個結果集。
1 當@objnameNULL 或 未指定時,會傳回單一結果集。

[ @include_total_xtp_storage = ] include_total_xtp_storage

適用於:SQL Server 2017 (14.x) 和更新版本,以及 SQL 資料庫

當@oneresultset設定為 1,此參數會決定單一結果集是否包含記憶體的數據MEMORY_OPTIMIZED_DATA行。 @include_total_xtp_storage為 bit,預設值為 0。 如果 1為 ,則結果集中會包含 XTP 資料行。

傳回碼值

0 (成功) 或 1 (失敗)。

結果集

如果省略@objname且@oneresultset的值0,則會傳回下列結果集以提供目前的資料庫大小資訊。

資料行名稱 資料類型 描述
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且 @oneresultset 的值1,則會傳回下列單一結果集以提供目前的資料庫大小資訊。

資料行名稱 資料類型 描述
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(20) 數據表中現有的數據列數目。 如果指定的物件是 Service Broker 佇列,這個數據行會指出佇列中的訊息數目。
reserved varchar(18) @objname保留空間總數。
data varchar(18) 數據在 @objname 中使用的總空間量。
index_size varchar(18) 索引在 @objname 中使用的總空間量。
unused varchar(18) 保留給 @objname 但尚未使用的空間總量。

當未指定任何參數時,此模式是預設值。 系統會傳回下列結果集,詳細說明磁碟上的資料庫大小資訊。

資料行名稱 資料類型 描述
database_name nvarchar(128) 目前資料庫的名稱。
database_size varchar(18) 目前資料庫的大小,以 MB 為單位。 database_size 同時包含數據和記錄檔。 如果資料庫有檔案 MEMORY_OPTIMIZED_DATA 群組,這個值會包含檔案群組中所有檢查點檔案的總磁碟大小。
unallocated space varchar(18) 資料庫中未保留給資料庫對象的空間。 如果資料庫有檔案 MEMORY_OPTIMIZED_DATA 群組,這個值會包含檔案群組中狀態 PRECREATED 為檢查點檔案的總磁碟大小。

資料庫中數據表所使用的空間。 此結果集不會反映記憶體優化資料表,因為沒有每個數據表的磁碟使用量會計:

資料行名稱 資料類型 描述
reserved varchar(18) 資料庫中物件所配置的總空間量。
data varchar(18) 數據所使用的總空間量。
index_size varchar(18) 索引所使用的總空間量。
unused varchar(18) 保留給資料庫中對象的空間總量,但尚未使用。

只有當資料庫具有至少一個MEMORY_OPTIMIZED_DATA容器的檔案群組時,才會傳回下列結果集:

資料行名稱 資料類型 描述
xtp_precreated varchar(18) 狀態 為 的檢查點檔案 PRECREATED大小總計,以 KB 為單位。 計入整個資料庫中未配置的空間。 例如,如果預先建立的檢查點檔案有 600,000 KB,則此資料列包含 600000 KB
xtp_used varchar(18) 狀態為、 ACTIVEMERGE TARGET的檢查點檔案UNDER CONSTRUCTION大小總計,以 KB 為單位。 此值是記憶體優化數據表中數據主動使用的磁碟空間。
xtp_pending_truncation varchar(18) 狀態 為 的檢查點檔案 WAITING_FOR_LOG_TRUNCATION大小總計,以 KB 為單位。 此值是用於等候清除的檢查點檔案的磁碟空間,一旦記錄截斷發生。

如果省略@objname,則 @oneresultset的值1,而 @include_total_xtp_storage1,則會傳回下列單一結果集以提供目前的資料庫大小資訊。 如果 @include_total_xtp_storage0 (預設值),則會省略最後三個數據行。

資料行名稱 資料類型 描述
database_name nvarchar(128) 目前資料庫的名稱。
database_size varchar(18) 目前資料庫的大小,以 MB 為單位。 database_size 同時包含數據和記錄檔。 如果資料庫有檔案 MEMORY_OPTIMIZED_DATA 群組,這個值會包含檔案群組中所有檢查點檔案的總磁碟大小。
unallocated space varchar(18) 資料庫中未保留給資料庫對象的空間。 如果資料庫有檔案 MEMORY_OPTIMIZED_DATA 群組,這個值會包含檔案群組中狀態 PRECREATED 為檢查點檔案的總磁碟大小。
reserved varchar(18) 資料庫中物件所配置的總空間量。
data varchar(18) 數據所使用的總空間量。
index_size varchar(18) 索引所使用的總空間量。
unused varchar(18) 保留給資料庫中對象的空間總量,但尚未使用。
xtp_precreated1 varchar(18) 狀態 為 的檢查點檔案 PRECREATED大小總計,以 KB 為單位。 此值會算作資料庫整體中未配置的空間。 如果資料庫沒有至少一個MEMORY_OPTIMIZED_DATA容器的檔案群組,則傳NULL回 。
xtp_used1 varchar(18) 狀態為、 ACTIVEMERGE TARGET的檢查點檔案UNDER CONSTRUCTION大小總計,以 KB 為單位。 此值是記憶體優化數據表中數據主動使用的磁碟空間。 如果資料庫沒有至少一個MEMORY_OPTIMIZED_DATA容器的檔案群組,則傳NULL回 。
xtp_pending_truncation1 varchar(18) 狀態 為 的檢查點檔案 WAITING_FOR_LOG_TRUNCATION大小總計,以 KB 為單位。 此值是用於等候清除的檢查點檔案的磁碟空間,一旦記錄截斷發生。 如果資料庫沒有至少一個MEMORY_OPTIMIZED_DATA容器的檔案群組,則傳NULL回 。

1 只有在@include_total_xtp_storage設定為 1時才包含。

備註

database_size通常大於的總和reservedunallocated space + ,因為它包含記錄檔的大小,但reservedunallocated_space只考慮數據頁。 在某些情況下,使用 Azure Synapse Analytics 時,此語句可能不是真的。

這兩個結果集都包含 XML 索引和全文檢索索引 index_size 所使用的頁面。 指定@objname,物件的 XML 索引和全文檢索索引的頁面也會計算在總計reservedindex_size結果中。

如果計算資料庫或空間索引的對象的空間使用量,則空間大小數據行,例如 database_sizereservedindex_size,包含空間索引的大小。

指定@updateusage時,SQL Server 資料庫引擎 會掃描資料庫中的數據頁,並針對每個數據表所使用的儲存空間,對 和 sys.partitions 目錄檢視進行任何必要的更正sys.allocation_units 例如,卸除索引之後,當數據表的空間資訊可能不是目前時,在某些情況下。 @updateusage可能需要一些時間才能在大型數據表或資料庫上執行。 只有在您懷疑傳回不正確的值,以及進程對資料庫中其他使用者或進程沒有負面影響時,才使用 @updateusage 。 如果慣用, DBCC UPDATEUSAGE 可以個別執行。

注意

當您卸除或重建大型索引,或卸除或截斷大型數據表時,資料庫引擎 會延遲實際的頁面解除分配及其相關聯的鎖定,直到交易認可之後。 延遲卸除作業不會立即釋放已配置的空間。 因此,卸除或截斷大型物件后立即傳 sp_spaceused 回的值可能不會反映可用的實際磁碟空間。

權限

執行 sp_spaceused 的許可權會授與 公用 角色。 只有 db_owner 固定資料庫角色的成員,才能指定 @updateusage 參數。

範例

A. 顯示數據表的磁碟空間資訊

下列範例會報告數據表及其索引的 Vendor 磁碟空間資訊。

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

B. 顯示資料庫更新的空間資訊

下列範例摘要說明目前資料庫中所使用的空間,並使用選擇性參數 @updateusage 以確保傳回目前的值。

USE AdventureWorks2022;
GO
EXEC sp_spaceused @updateusage = N'TRUE';
GO

C. 顯示與已啟用 Stretch 之數據表相關聯之遠端數據表的空間使用量資訊

下列範例摘要說明遠端數據表與已啟用 Stretch 之數據表相關聯的空間,方法是使用 @mode 自變數來指定遠端目標。 如需詳細資訊,請參閱 Stretch Database

USE StretchedAdventureWorks2022;
GO

EXEC sp_spaceused N'Purchasing.Vendor', @mode = 'REMOTE_ONLY';

D. 在單一結果集中顯示資料庫的空間使用量資訊

下列範例摘要說明單一結果集中目前資料庫的空間使用量。

USE AdventureWorks2022;
GO
EXEC sp_spaceused @oneresultset = 1;

E. 在單一結果集中顯示具有至少一個MEMORY_OPTIMIZED檔案群組的資料庫空間使用量資訊

下列範例摘要說明目前資料庫在單一結果集中至少有一個 MEMORY_OPTIMIZED 檔案群組的空間使用量。

USE WideWorldImporters
GO

EXEC sp_spaceused @updateusage = 'FALSE',
    @mode = 'ALL',
    @oneresultset = '1',
    @include_total_xtp_storage = '1';
GO

F. 顯示資料庫中MEMORY_OPTIMIZED數據表物件的空間使用量資訊

下列範例摘要說明目前資料庫中至少有一個MEMORY_OPTIMIZEDMEMORY_OPTIMIZED檔案群組之數據表物件的空間使用量。

USE WideWorldImporters
GO

EXEC sp_spaceused @objname = N'VehicleTemparatures',
    @updateusage = 'FALSE',
    @mode = 'ALL',
    @oneresultset = '0',
    @include_total_xtp_storage = '1';
GO