sp_spaceused (Transact-SQL)
適用対象: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
sp_spaceused
システム ストアド プロシージャには、次のいずれかが表示されます。
現在のデータベースのテーブル、インデックス付きビュー、または Service Broker キューによって使用される行数、予約済みディスク領域、ディスク領域
データベース全体で予約および使用されるディスク領域
構文
sp_spaceused
[ [ @objname = ] N'objname' ]
[ , [ @updateusage = ] 'updateusage' ]
[ , [ @mode = ] 'mode' ]
[ , [ @oneresultset = ] oneresultset ]
[ , [ @include_total_xtp_storage = ] include_total_xtp_storage ]
[ ; ]
Note
この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。
引数
Azure Synapse Analytics and Analytics Platform System (PDW) の場合、 sp_spaceused
パラメーターの序数位置に依存するのではなく、名前付きパラメーター ( sp_spaceused (@objname= N'Table1');
など) を指定する必要があります。
[ @objname = ] N'objname'
スペース使用量情報が要求される表、索引付きビュー、またはキューの修飾名または非修飾名。 @objname は nvarchar(776) で、既定値は NULL
です。 引用符は、修飾オブジェクト名が指定されている場合にのみ必要です。 完全修飾オブジェクト名 (データベース名を含む) を指定する場合、データベース名は現在のデータベースの名前である必要があります。
@objnameが指定されていない場合は、データベース全体の結果が返されます。
Note
Azure Synapse Analytics and Analytics Platform System (PDW) では、データベース オブジェクトとテーブル オブジェクトのみがサポートされます。
[ @updateusage = ] 'updateusage'
領域の使用状況情報を更新するために実行する必要がある DBCC UPDATEUSAGE
を示します。 @updateusage は varchar(5) で、既定値は false
です。 @objnameが指定されていない場合、ステートメントはデータベース全体で実行されます。 それ以外の場合、ステートメントは @objnameで実行されます。 値は、true
または false
です。
[ @mode = ] 'mode'
結果のスコープを示します。 ストレッチ テーブルまたはデータベースの場合、 @mode パラメーターを使用すると、オブジェクトのリモート部分を含めたり除外したりできます。 詳細については、「 Stretch Database」を参照してください。
重要
拡張データベースは、SQL Server 2022 (16.x) および Azure SQL Database では非推奨になります。 この機能は、データベース エンジンの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。
@mode は varchar(11)であり、これらの値のいずれかを指定できます。
Value | 説明 |
---|---|
ALL (既定値) |
ローカル部分とリモート部分の両方を含む、オブジェクトまたはデータベースのストレージ統計を返します。 |
LOCAL_ONLY |
オブジェクトまたはデータベースのローカル部分のみのストレージ統計を返します。 オブジェクトまたはデータベースが Stretch 対応でない場合は、 @mode が ALL されている場合と同じ統計情報を返します。 |
REMOTE_ONLY |
オブジェクトまたはデータベースのリモート部分のみのストレージ統計を返します。 このオプションは、次のいずれかの条件に該当する場合にエラーを発生させます。 テーブルが Stretch に対して有効になっていません。 テーブルは Stretch に対して有効になっていますが、データ移行を有効にしたことがない。 この場合、リモート テーブルにはスキーマがまだありません。 ユーザーはリモート テーブルを手動で削除しました。 リモート データ アーカイブのプロビジョニングは成功の状態を返しましたが、実際には失敗しました。 |
[ @oneresultset = ] oneresultset
1 つの結果セットを返すかどうかを示します。 @oneresultset は ビットであり、次のいずれかの値を指定できます。
Value | 説明 |
---|---|
0 (既定値) |
@objnameが null または指定されていない場合は、2 つの結果セットが返されます。 |
1 |
@objnameがNULL または指定されていない場合は、1 つの結果セットが返されます。 |
[ @include_total_xtp_storage = ] include_total_xtp_storage
適用対象: SQL Server 2017 (14.x) 以降のバージョン、および SQL Database
@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) | データベース内のオブジェクト用に予約されているが、まだ使用されていない領域の合計量。 |
次の結果セットは 返されます データベースに少なくとも 1 つのコンテナーを含む MEMORY_OPTIMIZED_DATA
ファイル グループがある場合は、その場合に発生します。
列名 | データ型 | 説明 |
---|---|---|
xtp_precreated |
varchar(18) | 状態 PRECREATED を持つチェックポイント ファイルの合計サイズ (KB 単位)。 データベース全体の未割り当て領域にカウントされます。 たとえば、600,000 KB の事前に作成されたチェックポイント ファイルがある場合、この列には 600000 KB が含まれます。 |
xtp_used |
varchar(18) | 状態 UNDER CONSTRUCTION 、 ACTIVE 、 MERGE TARGET を含むチェックポイント ファイルの合計サイズ (KB 単位)。 この値は、メモリ最適化テーブルのデータにアクティブに使用されるディスク領域です。 |
xtp_pending_truncation |
varchar(18) | 状態 WAITING_FOR_LOG_TRUNCATION を持つチェックポイント ファイルの合計サイズ (KB 単位)。 この値は、ログの切り捨てが行われると、クリーンアップを待機しているチェックポイント ファイルに使用されるディスク領域です。 |
@objnameを省略すると、@oneresultsetの値が1
され、@include_total_xtp_storageが1
場合は、次の単一の結果セットが返され、現在のデータベース サイズ情報が提供されます。 @include_total_xtp_storageが0
(既定値) の場合、最後の 3 つの列は省略されます。
列名 | データ型 | 説明 |
---|---|---|
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 単位)。 この値は、データベース全体の未割り当て領域にカウントされます。 データベースに少なくとも 1 つのコンテナーを含むMEMORY_OPTIMIZED_DATA ファイル グループがない場合は、NULL を返します。 |
xtp_used 1 |
varchar(18) | 状態 UNDER CONSTRUCTION 、 ACTIVE 、 MERGE TARGET を含むチェックポイント ファイルの合計サイズ (KB 単位)。 この値は、メモリ最適化テーブルのデータにアクティブに使用されるディスク領域です。 データベースに少なくとも 1 つのコンテナーを含むMEMORY_OPTIMIZED_DATA ファイル グループがない場合は、NULL を返します。 |
xtp_pending_truncation 1 |
varchar(18) | 状態 WAITING_FOR_LOG_TRUNCATION を持つチェックポイント ファイルの合計サイズ (KB 単位)。 この値は、ログの切り捨てが行われると、クリーンアップを待機しているチェックポイント ファイルに使用されるディスク領域です。 データベースに少なくとも 1 つのコンテナーを含む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.allocation_units
およびsys.partitions
カタログ ビューに対して必要な修正を行います。 インデックスが削除された後、テーブルの領域情報が最新でない場合など、いくつかの状況があります。 @updateusage は、大規模なテーブルまたはデータベースで実行するのに時間がかかる場合があります。 @updateusageは、正しくない値が返されていると思われる場合、およびプロセスがデータベース内の他のユーザーまたはプロセスに悪影響を及ぼさない場合にのみ使用します。 必要に応じて、 DBCC UPDATEUSAGE
を個別に実行できます。
Note
大きなインデックスを削除または再構築したり、大きなテーブルに対する削除や切り詰めを行うと、トランザクションがコミットされるまで、データベース エンジンにより、実際のページの割り当て解除と、それらに関連付けられたロックが遅延されます。 遅延ドロップ操作では、割り当てられた領域は直ちに解放されません。 そのため、大きなオブジェクトを削除または切り捨てた直後に sp_spaceused
によって返される値は、使用可能な実際のディスク領域を反映していない可能性があります。
アクセス許可
sp_spaceused
を実行するアクセス許可は、public ロールに付与されます。 @updateusage パラメーターを指定できるのは、db_owner 固定データベース ロールのメンバーだけです。
例
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 対応テーブルに関連付けられているリモート テーブルに関する領域の使用状況情報を表示する
次の例では、 @mode 引数を使用してリモート ターゲットを指定することで、Stretch 対応テーブルに関連付けられているリモート テーブルで使用される領域を要約します。 詳細については、「Stretch Database」を参照してください。
USE StretchedAdventureWorks2022;
GO
EXEC sp_spaceused N'Purchasing.Vendor', @mode = 'REMOTE_ONLY';
D. 1 つの結果セット内のデータベースの領域使用量情報を表示する
次の例は、1 つの結果セット内の現在のデータベースの領域使用量をまとめたものです。
USE AdventureWorks2022;
GO
EXEC sp_spaceused @oneresultset = 1;
E. 1 つの結果セットに少なくとも 1 つのMEMORY_OPTIMIZED ファイル グループがあるデータベースの領域使用量情報を表示する
次の例では、1 つの結果セットに少なくとも 1 つの 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
テーブル オブジェクトの領域使用量と、少なくとも 1 つの MEMORY_OPTIMIZED
ファイル グループを要約します。
USE WideWorldImporters
GO
EXEC sp_spaceused @objname = N'VehicleTemparatures',
@updateusage = 'FALSE',
@mode = 'ALL',
@oneresultset = '0',
@include_total_xtp_storage = '1';
GO