次の方法で共有


sp_spaceused (Transact-SQL)

適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

sp_spaceused システム ストアド プロシージャには、次のいずれかが表示されます。

  • 現在のデータベースのテーブル、インデックス付きビュー、または Service Broker キューによって使用される行数、予約済みディスク領域、ディスク領域

  • データベース全体で予約および使用されるディスク領域

Transact-SQL 構文表記規則

構文

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'

スペース使用量情報が要求される表、索引付きビュー、またはキューの修飾名または非修飾名。 @objnamenvarchar(776) で、既定値は NULL です。 引用符は、修飾オブジェクト名が指定されている場合にのみ必要です。 完全修飾オブジェクト名 (データベース名を含む) を指定する場合、データベース名は現在のデータベースの名前である必要があります。

@objnameが指定されていない場合は、データベース全体の結果が返されます。

Note

Azure Synapse Analytics and Analytics Platform System (PDW) では、データベース オブジェクトとテーブル オブジェクトのみがサポートされます。

[ @updateusage = ] 'updateusage'

領域の使用状況情報を更新するために実行する必要がある DBCC UPDATEUSAGE を示します。 @updateusagevarchar(5) で、既定値は false です。 @objnameが指定されていない場合、ステートメントはデータベース全体で実行されます。 それ以外の場合、ステートメントは @objnameで実行されます。 値は、true または false です。

[ @mode = ] 'mode'

結果のスコープを示します。 ストレッチ テーブルまたはデータベースの場合、 @mode パラメーターを使用すると、オブジェクトのリモート部分を含めたり除外したりできます。 詳細については、「 Stretch Database」を参照してください。

重要

拡張データベースは、SQL Server 2022 (16.x) および Azure SQL Database では非推奨になります。 この機能は、データベース エンジンの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。

@modevarchar(11)であり、これらの値のいずれかを指定できます。

Value 説明
ALL (既定値) ローカル部分とリモート部分の両方を含む、オブジェクトまたはデータベースのストレージ統計を返します。
LOCAL_ONLY オブジェクトまたはデータベースのローカル部分のみのストレージ統計を返します。 オブジェクトまたはデータベースが Stretch 対応でない場合は、 @modeALLされている場合と同じ統計情報を返します。
REMOTE_ONLY オブジェクトまたはデータベースのリモート部分のみのストレージ統計を返します。 このオプションは、次のいずれかの条件に該当する場合にエラーを発生させます。

テーブルが Stretch に対して有効になっていません。

テーブルは Stretch に対して有効になっていますが、データ移行を有効にしたことがない。 この場合、リモート テーブルにはスキーマがまだありません。

ユーザーはリモート テーブルを手動で削除しました。

リモート データ アーカイブのプロビジョニングは成功の状態を返しましたが、実際には失敗しました。

[ @oneresultset = ] oneresultset

1 つの結果セットを返すかどうかを示します。 @oneresultsetビットであり、次のいずれかの値を指定できます。

Value 説明
0 (既定値) @objnameが null または指定されていない場合は、2 つの結果セットが返されます。
1 @objnameNULLまたは指定されていない場合は、1 つの結果セットが返されます。

[ @include_total_xtp_storage = ] include_total_xtp_storage

適用対象: SQL Server 2017 (14.x) 以降のバージョン、および SQL Database

@oneresultset1 に設定されている場合、このパラメーターは、単一の結果セットにMEMORY_OPTIMIZED_DATAストレージの列が含まれているかどうかを判断します。 @include_total_xtp_storagebit で、既定値は 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 CONSTRUCTIONACTIVEMERGE TARGETを含むチェックポイント ファイルの合計サイズ (KB 単位)。 この値は、メモリ最適化テーブルのデータにアクティブに使用されるディスク領域です。
xtp_pending_truncation varchar(18) 状態 WAITING_FOR_LOG_TRUNCATIONを持つチェックポイント ファイルの合計サイズ (KB 単位)。 この値は、ログの切り捨てが行われると、クリーンアップを待機しているチェックポイント ファイルに使用されるディスク領域です。

@objnameを省略すると、@oneresultsetの値が1され、@include_total_xtp_storage1場合は、次の単一の結果セットが返され、現在のデータベース サイズ情報が提供されます。 @include_total_xtp_storage0 (既定値) の場合、最後の 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 CONSTRUCTIONACTIVEMERGE 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_storage1に設定されている場合にのみ含まれます。

解説

ログ ファイルのサイズが含まれているため、 database_size の値は通常、 reserved + unallocated space の合計よりも大きくなりますが、 reservedunallocated_space ではデータ ページのみが考慮されます。 Azure Synapse Analytics では、このステートメントが正しくない場合があります。

XML インデックスとフルテキスト インデックスで使用されるページは、両方の結果セットの index_size に含まれます。 @objnameを指定すると、オブジェクトの XML インデックスとフルテキスト インデックスのページも、結果の合計reservedindex_sizeにカウントされます。

空間インデックスであるデータベースまたはオブジェクトの領域使用量が計算される場合、空間サイズの列 ( database_sizereservedindex_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