sp_spaceused (Transact-SQL)
適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)
系統 sp_spaceused
預存程式會顯示下列其中一項:
目前資料庫中數據表、索引檢視表或 Service Broker 佇列所使用的數據列、保留磁碟空間和磁碟空間數目
保留並供整個資料庫使用的磁碟空間
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 上執行。 值可以是 true
或 false
。
[ @mode = ] 'mode'
指出結果的範圍。 對於延展數據表或資料庫, @mode 參數可讓您包含或排除對象的遠端部分。 如需詳細資訊,請參閱 Stretch Database。
重要
Stretch Database 在 SQL Server 2022 (16.x) 及 Azure SQL 資料庫中已被取代。 資料庫引擎的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。
@mode為 varchar(11),而且可以是下列其中一個值。
值 | Description |
---|---|
ALL (預設值) |
傳回物件或資料庫的儲存統計數據,包括本機部分和遠端部分。 |
LOCAL_ONLY |
只傳回物件或資料庫的本機部分的記憶體統計數據。 如果對象或資料庫未啟用 Stretch,則傳回與 @mode 為 ALL 時相同的統計數據。 |
REMOTE_ONLY |
只傳回物件或資料庫的遠端部分的記憶體統計數據。 當下列其中一個條件成立時,此選項會引發錯誤: 數據表未針對 Stretch 啟用。 數據表已啟用 Stretch,但您從未啟用資料遷移。 在此情況下,遠端數據表還沒有架構。 用戶手動卸除遠程數據表。 遠端數據封存的布建傳回成功狀態,但事實上失敗。 |
[ @oneresultset = ] oneresultset
指出是否要傳回單一結果集。 @oneresultset位,可以是下列其中一個值:
值 | Description |
---|---|
0 (預設值) |
當@objname為 null 或未指定時,會傳回兩個結果集。 |
1 |
當@objname為 NULL 或 未指定時,會傳回單一結果集。 |
[ @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_stats 或 sys.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) | 狀態為、 ACTIVE 和 MERGE TARGET 的檢查點檔案UNDER CONSTRUCTION 大小總計,以 KB 為單位。 此值是記憶體優化數據表中數據主動使用的磁碟空間。 |
xtp_pending_truncation |
varchar(18) | 狀態 為 的檢查點檔案 WAITING_FOR_LOG_TRUNCATION 大小總計,以 KB 為單位。 此值是用於等候清除的檢查點檔案的磁碟空間,一旦記錄截斷發生。 |
如果省略@objname,則 @oneresultset的值為 1
,而 @include_total_xtp_storage 為 1
,則會傳回下列單一結果集以提供目前的資料庫大小資訊。 如果 @include_total_xtp_storage 為 0
(預設值),則會省略最後三個數據行。
資料行名稱 | 資料類型 | 描述 |
---|---|---|
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_precreated 1 |
varchar(18) | 狀態 為 的檢查點檔案 PRECREATED 大小總計,以 KB 為單位。 此值會算作資料庫整體中未配置的空間。 如果資料庫沒有至少一個MEMORY_OPTIMIZED_DATA 容器的檔案群組,則傳NULL 回 。 |
xtp_used 1 |
varchar(18) | 狀態為、 ACTIVE 和 MERGE TARGET 的檢查點檔案UNDER CONSTRUCTION 大小總計,以 KB 為單位。 此值是記憶體優化數據表中數據主動使用的磁碟空間。 如果資料庫沒有至少一個MEMORY_OPTIMIZED_DATA 容器的檔案群組,則傳NULL 回 。 |
xtp_pending_truncation 1 |
varchar(18) | 狀態 為 的檢查點檔案 WAITING_FOR_LOG_TRUNCATION 大小總計,以 KB 為單位。 此值是用於等候清除的檢查點檔案的磁碟空間,一旦記錄截斷發生。 如果資料庫沒有至少一個MEMORY_OPTIMIZED_DATA 容器的檔案群組,則傳NULL 回 。 |
1 只有在@include_total_xtp_storage設定為 1
時才包含。
備註
值database_size
通常大於的總和reserved
unallocated space
+ ,因為它包含記錄檔的大小,但reserved
unallocated_space
只考慮數據頁。 在某些情況下,使用 Azure Synapse Analytics 時,此語句可能不是真的。
這兩個結果集都包含 XML 索引和全文檢索索引 index_size
所使用的頁面。 指定@objname時,物件的 XML 索引和全文檢索索引的頁面也會計算在總計reserved
和index_size
結果中。
如果計算資料庫或空間索引的對象的空間使用量,則空間大小數據行,例如 database_size
、 reserved
和 index_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_OPTIMIZED
MEMORY_OPTIMIZED
檔案群組之數據表物件的空間使用量。
USE WideWorldImporters
GO
EXEC sp_spaceused @objname = N'VehicleTemparatures',
@updateusage = 'FALSE',
@mode = 'ALL',
@oneresultset = '0',
@include_total_xtp_storage = '1';
GO