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