sp_spaceused (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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'

スペース使用量情報が要求される表、索引付きビュー、またはキューの修飾名または非修飾名。 @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

@oneresultset1設定されている場合、このパラメーターは、単一の結果セットにストレージのMEMORY_OPTIMIZED_DATA列が含まれているかどうかを決定します。 @include_total_xtp_storageはビットで、既定値は 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 (キロバイト))。 データベース全体の未割り当て領域にカウントされます。 たとえば、事前に作成された チェックpoint ファイルのKB (キロバイト)が 600,000 個ある場合、この列には 600000 KB.
xtp_used varchar(18) KB (キロバイト)の状態UNDER CONSTRUCTIONACTIVE、および MERGE TARGET、チェックポイント ファイルの合計サイズ。 この値は、メモリ最適化テーブルのデータにアクティブに使用されるディスク領域です。
xtp_pending_truncation varchar(18) 状態WAITING_FOR_LOG_TRUNCATIONを持つチェックポイント ファイルの合計サイズ (KB (キロバイト))。 この値は、ログの切り捨てが行われると、クリーンアップを待機しているチェックポイント ファイルに使用されるディスク領域です。

@objnameを省略すると、@oneresultsetの値は 1@include_total_xtp_storage1、現在のデータベース サイズ情報を提供するために次の単一の結果セットが返されます。 @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_precreated1 varchar(18) 状態PRECREATEDを持つチェックポイント ファイルの合計サイズ (KB (キロバイト))。 この値は、データベース全体の未割り当て領域にカウントされます。 NULLデータベースに少なくとも 1 つのコンテナーを含むMEMORY_OPTIMIZED_DATAファイル グループがない場合に返します。
xtp_used1 varchar(18) KB (キロバイト)の状態UNDER CONSTRUCTIONACTIVE、および MERGE TARGET、チェックポイント ファイルの合計サイズ。 この値は、メモリ最適化テーブルのデータにアクティブに使用されるディスク領域です。 NULLデータベースに少なくとも 1 つのコンテナーを含むMEMORY_OPTIMIZED_DATAファイル グループがない場合に返します。
xtp_pending_truncation1 varchar(18) 状態WAITING_FOR_LOG_TRUNCATIONを持つチェックポイント ファイルの合計サイズ (KB (キロバイト))。 この値は、ログの切り捨てが行われると、クリーンアップを待機しているチェックポイント ファイルに使用されるディスク領域です。 NULLデータベースに少なくとも 1 つのコンテナーを含むMEMORY_OPTIMIZED_DATAファイル グループがない場合に返します。

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 個別に実行できます。

Note

大きなインデックスを削除または再構築したり、大きなテーブルに対する削除や切り詰めを行うと、トランザクションがコミットされるまで、データベース エンジンにより、実際のページの割り当て解除と、それらに関連付けられたロックが遅延されます。 遅延ドロップ操作では、割り当てられた領域は直ちに解放されません。 そのため、大きなオブジェクトを削除または切り捨てた直後に sp_spaceused 返される値は、使用可能な実際のディスク領域を反映していない可能性があります。

アクセス許可

実行sp_spaceusedするアクセス許可は、パブリック ロールに付与されます。 @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 テーブル オブジェクトの領域使用量情報を表示する

次の例では、少なくとも 1 つの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