sp_spaceused (Transact-SQL)
適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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はビットで、既定値は 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 CONSTRUCTION ACTIVE 、および MERGE TARGET 、チェックポイント ファイルの合計サイズ。 この値は、メモリ最適化テーブルのデータにアクティブに使用されるディスク領域です。 |
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 (キロバイト))。 この値は、データベース全体の未割り当て領域にカウントされます。 NULL データベースに少なくとも 1 つのコンテナーを含むMEMORY_OPTIMIZED_DATA ファイル グループがない場合に返します。 |
xtp_used 1 |
varchar(18) | KB (キロバイト)の状態UNDER CONSTRUCTION ACTIVE 、および MERGE TARGET 、チェックポイント ファイルの合計サイズ。 この値は、メモリ最適化テーブルのデータにアクティブに使用されるディスク領域です。 NULL データベースに少なくとも 1 つのコンテナーを含むMEMORY_OPTIMIZED_DATA ファイル グループがない場合に返します。 |
xtp_pending_truncation 1 |
varchar(18) | 状態WAITING_FOR_LOG_TRUNCATION を持つチェックポイント ファイルの合計サイズ (KB (キロバイト))。 この値は、ログの切り捨てが行われると、クリーンアップを待機しているチェックポイント ファイルに使用されるディスク領域です。 NULL データベースに少なくとも 1 つのコンテナーを含むMEMORY_OPTIMIZED_DATA ファイル グループがない場合に返します。 |
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
個別に実行できます。
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
関連するコンテンツ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示